Example #1
0
    def __open(self, image_path):
        """
        Open multi-resolution image for writing.

        Args:
            image_path (str): Path of the image to load.
        """

        # Create image writer object.
        #
        self.__writer = mir.MultiResolutionImageWriter()

        # Open file for writing.
        #
        result_code = self.__writer.openFile(image_path)

        if result_code != 0:
            raise ValueError(f'error opening image')

        # Save the path of the file.
        #
        self.__path = image_path
Example #2
0
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 25 18:20:37 2015

@author: Geert
"""

import sys
sys.path.append(r"D:\Code\sources\diag\build (VC12)\bin\Release")
import multiresolutionimageinterface
import numpy as np
level = 6
r = multiresolutionimageinterface.MultiResolutionImageReader()
w = multiresolutionimageinterface.MultiResolutionImageWriter()
i = r.open(r"D:\Temp\T06-12822-II1-10.mrxs")
w.openFile(r"D:\Temp\test_python.tif")
w.setTileSize(512)
w.setCompression(multiresolutionimageinterface.LZW)
w.setDataType(multiresolutionimageinterface.UChar)
w.setColorType(multiresolutionimageinterface.RGB)
dims = i.getLevelDimensions(level)
a = np.zeros(512*512*4, dtype='ubyte')
w.writeImageInformation(dims[0], dims[1])
for y in range(0, dims[1], 512):
    print y
    for x in range(0, dims[0], 512):
        i.getUCharPatch(int(x*i.getLevelDownsample(level)),
                        int(y*i.getLevelDownsample(level)), 512, 512, level, a)
        w.writeBaseImagePart(a.reshape(512, 512, 4)[:, :, 2::-1].flatten())
w.finishImage()
Example #3
0
    def finish(self, free=True):

        #   首先把文件关闭保存数据,再重新打开
        self.f.close()  # 先保存下来
        f = h5py.File(self.hdf5name, 'r')  # 然后以只读方式打开

        import multiresolutionimageinterface as mir
        writer = mir.MultiResolutionImageWriter()
        writer.openFile(self.target_tiff)
        self.write_tile_size = self.chunk_size  # 用新的程序,直接写每个chunk就行了
        writer.setTileSize(self.write_tile_size)
        writer.setCompression(mir.LZW)
        writer.setDataType(mir.UChar)
        writer.setInterpolation(mir.NearestNeighbor)
        writer.setColorType(mir.Monochrome)
        writer.writeImageInformation(self.tiff_width, self.tiff_height)
        if self.spacing is not None:
            spacing_vec = mir.vector_double()
            spacing_vec.push_back(float(self.spacing))
            spacing_vec.push_back(float(self.spacing))
            writer.setSpacing(spacing_vec)

        print('start writing tiff file {} ...'.format(self.target_tiff))
        print('   width: {}, height: {}, default value: {}'.format(
            self.tiff_width, self.tiff_height, self.default_val))
        print('   write tile size: {}, chunk size: {}'.format(
            self.write_tile_size, self.chunk_size))
        sys.stdout.flush()

        #   新的程序
        for chunk_x in range(self.horizontal_chunk_amount):
            for chunk_y in range(self.vertical_chunk_amount):
                if not f['accessed'][
                        chunk_y,
                        chunk_x]:  # 注:在上面的设定中,accessed是矩阵形式的,它的x和y和坐标是反的
                    continue
                group_name = str(chunk_x) + '_' + str(chunk_y)
                value = f[group_name]['value']
                writer.writeBaseImagePartToLocation(
                    np.array(value).flatten(), chunk_x * self.chunk_size,
                    chunk_y * self.chunk_size)

        # #   以前的程序,适用于尺寸很正常的tiff
        # x_steps = int(self.tiff_width / self.write_tile_size)
        # y_steps = int(self.tiff_height / self.write_tile_size)
        #
        # default_block_flatten = (self.default_val * np.ones(shape=(self.write_tile_size, self.write_tile_size))).astype(
        #     np.uint8).flatten()
        # current = 0
        # total = y_steps * x_steps
        # from .monitor import terminal_viewer
        # for y_step in range(y_steps):
        #     for x_step in range(x_steps):
        #         current += 1
        #         terminal_viewer(current, total)
        #         #   计算是哪一个chunk
        #         chunk_x = int(x_step * self.write_tile_size / self.chunk_size)
        #         chunk_y = int(y_step * self.write_tile_size / self.chunk_size)
        #         #   若该chunk未被访问过,直接写默认块
        #         if not f['accessed'][chunk_y, chunk_x]:
        #             writer.writeBaseImagePart(default_block_flatten)
        #             continue
        #         group_name = str(chunk_x) + '_' + str(chunk_y)
        #         value = f[group_name]['value']
        #         #   计算在该chunk中的起始坐标
        #         this_tile_x_lb = x_step * self.write_tile_size - chunk_x * self.chunk_size
        #         this_tile_y_lb = y_step * self.write_tile_size - chunk_y * self.chunk_size
        #         this_tile_value = value[this_tile_y_lb:this_tile_y_lb + self.write_tile_size,
        #                           this_tile_x_lb:this_tile_x_lb + self.write_tile_size]
        #         #   准备数据
        #         writer.writeBaseImagePart(this_tile_value.flatten())
        f.close()
        writer.finishImage()
        if free:
            self.free()
 def WritetoImage(self, output_path: str):
     writer = mir.MultiResolutionImageWriter()
     writer.writeImageInformation(
         self.getDimensions()[0], self.getDimensions()[1])
     writer.writeImageToFile(self.img, output_path)