skimage 旋转图像显示为黑色
skimage rotated image displays as black
我正在尝试对样本图像进行简单的旋转,但是当我尝试显示它时,文件只显示黑色像素。我可以看出它已旋转,因为尺寸已正确更改。
from io import BytesIO
import numpy as np
from PIL import Image
from skimage.transform import rotate
from flask import send_file
image_file = Image.open(file_path).convert("L")
image_array = np.array(image_file)
image_array_rotated = rotate(image_array, angle=90, resize=True)
rotated_image_file = Image.fromarray(image_array_rotated).convert("L")
buffered_image_file = BytesIO()
rotated_image_file.save(buffered_image_file, 'PNG')
buffered_image_file.seek(0)
return send_file(buffered_image_file, mimetype='image/png')
如果我删除旋转代码并显示原始图像或转换后的灰度 ("L") 图像,它们都可以正常显示。我的旋转图像是黑色的。
scikit-image 会在需要插值或卷积时自动将图像转换为浮点数,以确保计算精度。在转换为float时,图像的范围被转换为[0, 1]。您可以在此处阅读有关它如何处理数据类型的更多信息:
https://scikit-image.org/docs/dev/user_guide/data_types.html
以下是修改代码以使用 PIL 数据的方法:
from io import BytesIO
import numpy as np
from PIL import Image
from skimage.transform import rotate
from skimage import util
from flask import send_file
image_file = Image.open(file_path).convert("L")
image_array = util.img_as_float(np.array(image_file))
image_array_rotated = rotate(image_array, angle=90, resize=True)
image_array_rotated_bytes = util.img_as_ubyte(image_array_rotated)
rotated_image_file = Image.fromarray(image_array_rotated).convert("L")
buffered_image_file = BytesIO()
rotated_image_file.save(buffered_image_file, 'PNG')
buffered_image_file.seek(0)
return send_file(buffered_image_file, mimetype='image/png')
或者,您可以使用 skimage.io.imsave
,它会在幕后为您完成所有这些转换。
正如 Mark 在评论中指出的那样,另一种选择是也使用 PIL 进行轮换。
我正在尝试对样本图像进行简单的旋转,但是当我尝试显示它时,文件只显示黑色像素。我可以看出它已旋转,因为尺寸已正确更改。
from io import BytesIO
import numpy as np
from PIL import Image
from skimage.transform import rotate
from flask import send_file
image_file = Image.open(file_path).convert("L")
image_array = np.array(image_file)
image_array_rotated = rotate(image_array, angle=90, resize=True)
rotated_image_file = Image.fromarray(image_array_rotated).convert("L")
buffered_image_file = BytesIO()
rotated_image_file.save(buffered_image_file, 'PNG')
buffered_image_file.seek(0)
return send_file(buffered_image_file, mimetype='image/png')
如果我删除旋转代码并显示原始图像或转换后的灰度 ("L") 图像,它们都可以正常显示。我的旋转图像是黑色的。
scikit-image 会在需要插值或卷积时自动将图像转换为浮点数,以确保计算精度。在转换为float时,图像的范围被转换为[0, 1]。您可以在此处阅读有关它如何处理数据类型的更多信息:
https://scikit-image.org/docs/dev/user_guide/data_types.html
以下是修改代码以使用 PIL 数据的方法:
from io import BytesIO
import numpy as np
from PIL import Image
from skimage.transform import rotate
from skimage import util
from flask import send_file
image_file = Image.open(file_path).convert("L")
image_array = util.img_as_float(np.array(image_file))
image_array_rotated = rotate(image_array, angle=90, resize=True)
image_array_rotated_bytes = util.img_as_ubyte(image_array_rotated)
rotated_image_file = Image.fromarray(image_array_rotated).convert("L")
buffered_image_file = BytesIO()
rotated_image_file.save(buffered_image_file, 'PNG')
buffered_image_file.seek(0)
return send_file(buffered_image_file, mimetype='image/png')
或者,您可以使用 skimage.io.imsave
,它会在幕后为您完成所有这些转换。
正如 Mark 在评论中指出的那样,另一种选择是也使用 PIL 进行轮换。