この質問への回答を参照して、基本的な画像処理を行った後、独自の 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 を使用する必要はありません。画像を単純に保存する別の方法があれば、それで問題ありません。