0

参考这个问题的答案,经过一些基本的图像处理后,我尝试保存自己的 JPG 图像文件。我只应用了旋转和剪切。这是我的代码:

        import numpy as np
        import sys
        from skimage import data, io, filter, color, exposure
        import skimage.transform as tf
        from skimage.transform import rotate, setup, AffineTransform
        from PIL import Image

        mypath = PATH_TO_FILENAME
        readfile = FILENAME
        img = color.rgb2gray(io.imread(mypath + readfile))
        myimg = rotate(img, angle=10, order=2)
        afine_tf = tf.AffineTransform(shear=0.1)
        editedimg = tf.warp(myimg, afine_tf)

        # IF I UNCOMMENT THE TWO LINES BELOW, I CAN SEE THE EDITED IMAGE AS EXPECTED
        #io.imshow(editedimg)
        #io.show()  

        saveimg= np.array(editedimg)
        result = Image.fromarray((saveimg).astype(np.uint8))
        newfile = "edited_" + readfile
        result.save(path+newfile)

我知道图像处理很好,因为如果我在保存之前显示它,它就像预期的那样只是带有一点旋转和剪切的原始图像。但是我在保存它时做错了。我尝试不使用该astype(np.uint8))部件,但出现错误。然后我从上面提到的链接中删除了一些代码,因为我猜它特别适用于傅立叶变换,因为当我包含他们的一些代码时,我得到一个全是灰色但在剪切方向上有白线的图像我申请了。但现在保存的图像只有 2KB,只有黑色。

当我尝试一些简单的事情时:

result = Image.fromarray(editedimg)
result.save(path+newfile)

然后我收到了这个错误:

 raise IOError("cannot write mode %s as JPEG" % im.mode)
IOError: cannot write mode F as JPEG

我真的不需要使用 PIL,如果有另一种方法可以简单地保存我的图像,我可以接受。

4

1 回答 1

1

查看 PIL 叉子Pillow并没有那么过时,您可能应该为此使用什么。

此外,根据您的操作系统,您可能需要一些其他库来正确编译支持 JPEG 的 PIL,请参见此处

这也可能有帮助说您需要在保存之前将图像转换为 RGB 模式。

Image.open('old.jpeg').convert('RGB').save('new.jpeg')
于 2014-06-17T14:21:32.557 回答