参考this question的答案,经过一些基本的图像处理后,我试图保存自己的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,如果还有另一种方法可以简单地保存我的图像,我很好。
答案 0 :(得分:0)
查看PIL fork Pillow,是不是已经过时了,你可能应该使用它。
另外,根据您的操作系统,您可能需要一些其他库来正确编译PIL并支持JPEG,see here
This may also help表示您需要在保存之前将图像转换为RGB模式。
Image.open('old.jpeg').convert('RGB').save('new.jpeg')