Numpy 略读旋转图像显示为黑色

Numpy 略读旋转图像显示为黑色,numpy,python-imaging-library,scikit-image,numpy-ndarray,Numpy,Python Imaging Library,Scikit Image,Numpy Ndarray,我试图对一个样本图像进行简单的旋转,但当我试图显示它时,文件只显示黑色像素。我可以看出它已经旋转了,因为尺寸已正确更改 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

我试图对一个样本图像进行简单的旋转,但当我试图显示它时,文件只显示黑色像素。我可以看出它已经旋转了,因为尺寸已正确更改

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可在需要插值或卷积时自动将图像转换为浮点,以确保计算精度。在转换为浮点时,图像的范围将转换为[0,1]。您可以在此处阅读有关它如何处理数据类型的更多信息:

以下是如何修改代码以使用PIL数据:

从io导入字节io
将numpy作为np导入
从PIL导入图像
从skimage.transform导入旋转
从skimage导入util
从flask导入发送\u文件
image\u file=image.open(文件路径).convert(“L”)
image\u array=util.img\u as\u float(np.array(image\u文件))
图像阵列旋转=旋转(图像阵列,角度=90,调整大小=真)
image\u array\u rotated\u bytes=util.img\u as\u ubyte(image\u array\u rotated)
旋转的\u图像\u文件=image.fromarray(图像\u数组\u旋转)。转换(“L”)
缓冲的图像文件=BytesIO()
旋转的图像文件。保存(缓冲的图像文件,“PNG”)
缓冲的图像文件。查找(0)
返回发送文件(缓冲的图像文件,mimetype='image/png')
或者,您可以使用
skimage.io.imsave
,它可以在幕后为您完成所有这些转换


马克在评论中指出,另一种选择是使用PIL进行旋转。

scikit image会在需要插值或卷积时自动将图像转换为浮点,以确保计算精度。在转换为浮点时,图像的范围将转换为[0,1]。您可以在此处阅读有关它如何处理数据类型的更多信息:

以下是如何修改代码以使用PIL数据:

从io导入字节io
将numpy作为np导入
从PIL导入图像
从skimage.transform导入旋转
从skimage导入util
从flask导入发送\u文件
image\u file=image.open(文件路径).convert(“L”)
image\u array=util.img\u as\u float(np.array(image\u文件))
图像阵列旋转=旋转(图像阵列,角度=90,调整大小=真)
image\u array\u rotated\u bytes=util.img\u as\u ubyte(image\u array\u rotated)
旋转的\u图像\u文件=image.fromarray(图像\u数组\u旋转)。转换(“L”)
缓冲的图像文件=BytesIO()
旋转的图像文件。保存(缓冲的图像文件,“PNG”)
缓冲的图像文件。查找(0)
返回发送文件(缓冲的图像文件,mimetype='image/png')
或者,您可以使用
skimage.io.imsave
,它可以在幕后为您完成所有这些转换


马克在评论中指出,另一种选择是使用PIL进行轮换。

为什么要这样混淆
rotated=image\u file.rotate(-270,重采样=…,展开=真)
。尝试将
preserve\u range=True
参数添加到
rotate
为什么要这样混淆
rotated=image\u file.rotate(-270,重采样=…,展开=真)
。尝试将
preserve\u range=True
参数添加到
rotate