转换文件夹中的RGBA图像并将其以'.pgm'格式保存到另一个文件夹



我在一个文件夹中保存了一组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"格式不在模式中

感谢您的建议:)

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

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

提取:

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

最新更新