0

我有一组 RGBA 图像保存在一个文件夹中,我的目标是将这些图像转换为 pgm 格式的另一个文件夹,下面是代码:

path1 = file/path/where/image/are/stored
path2 = file/path/where/pgm/images/will/be/saved

list = os.listdir(path1)
for file in listing:
    #Transforms an RGBA with channel into an RGB only
    image_rgb = Image.open(file).convert('RGB')

    #Color separation stains to detect microscopic cells
    ihc_hed = rgb2hed(image_rgb)

    #Trasnforms the image into a numpy array of the UINT8 Type
    cv_img = ihc_hed.astype(np.uint8)

    # create color boundaries boundaries detecting black and blue stains
    lower = np.array([0,0,0], dtype = "uint8")
    upper = np.array([0,0,255], dtype = "uint8")
    #calculates the pixel within the specified boundaries and create a mask
    mask = cv2.inRange(cv_img, lower, upper)
    img = Image.fromarray(mask,'L')
    img.save(path2+file,'pgm')

但是我收到一条错误消息,指出 KeyError:'PGM',似乎 'pgm' 格式不在模式中

感谢您的建议 :)

4

1 回答 1

1

据我所知,scikit image 使用 Python Imaging Library 插件来保存图像文件。PIL 不支持 PGM。

有关如何为 PIL 编写自己的文件解码器,请参阅http://effbot.org/imagingbook/decoder.htm 。

提炼:

import Image, ImageFile
import string

class SpamImageFile(ImageFile.ImageFile):

    format = "SPAM"
    format_description = "Spam raster image"

    def _open(self):

        # check header
        header = self.fp.read(128)
        if header[:4] != "SPAM":
            raise SyntaxError, "not a SPAM file"

        header = string.split(header)

        # size in pixels (width, height)
        self.size = int(header[1]), int(header[2])

        # mode setting
        bits = int(header[3])
        if bits == 1:
            self.mode = "1"
        elif bits == 8:
            self.mode = "L"
        elif bits == 24:
            self.mode = "RGB"
        else:
            raise SyntaxError, "unknown number of bits"

        # data descriptor
        self.tile = [
            ("raw", (0, 0) + self.size, 128, (self.mode, 0, 1))
        ]

Image.register_open("SPAM", SpamImageFile)

Image.register_extension("SPAM", ".spam")
Image.register_extension("SPAM", ".spa") # dos version
于 2016-02-12T08:30:32.007 回答