Python 为什么Sobel过滤器返回黑色正方形?
我试图使用Python 为什么Sobel过滤器返回黑色正方形?,python,image-processing,python-imaging-library,scikit-image,sobel,Python,Image Processing,Python Imaging Library,Scikit Image,Sobel,我试图使用sobel和prewitt过滤器从skimage进行边缘检测,以比较结果,但对于这两种方法,我只得到了黑色方块 这是我的密码: import numpy as np from skimage import filters from PIL import Image a=Image.open('F:/CT1.png').convert('L') a.show() a=np.asarray(a) b=filters.sobel(a) b=Image.fromarray(b) b.show
sobel
和prewitt
过滤器从skimage
进行边缘检测,以比较结果,但对于这两种方法,我只得到了黑色方块
这是我的密码:
import numpy as np
from skimage import filters
from PIL import Image
a=Image.open('F:/CT1.png').convert('L')
a.show()
a=np.asarray(a)
b=filters.sobel(a)
b=Image.fromarray(b)
b.show()
与来自
scikit image
的大多数方法一样,该函数使用np.float64
进行计算,从而将图像适当地转换为0.0。。。1.0
。接下来,您的结果b
也是类型np.float64
,其值在相同范围内。现在转换到某个枕形图像
对象时,其设置为F
,用于32位浮点像素
现在,这个例子告诉我们:
在Windows上,使用标准PNG显示实用程序打开图像
目前尚不清楚图像实际显示的文件格式(?)。看起来,至少根据临时文件名,它是PNG。但是,例如,使用模式F
将一些图像
对象保存为PNG或JPG不起作用!因此,看起来,图像必须以某种方式转换以使其可显示。第一个猜测是,一些常规的8位图像被选为默认图像,因为您得到的图像几乎全是黑色的,这表明值0
和可能1
被视为“非常暗”。事实上,当使用
b=Image.fromarray(b*255)
使用b.show()
时,Windows图像预览将显示正确的图像
因此,这将是显示的一个解决方法
然而,如果您想保存图像,则不必进行转换,只需使用适当的文件格式来存储这些32位信息,例如TIFF:
b=Image.fromarray(b)
b、 保存('b.tiff')
与来自scikit image
的大多数方法一样,该函数使用np.float64
进行计算,从而将图像适当地转换为0.0。。。1.0
。接下来,您的结果b
也是类型np.float64
,其值在相同范围内。现在转换到某个枕形图像
对象时,其设置为F
,用于32位浮点像素
现在,这个例子告诉我们:
在Windows上,使用标准PNG显示实用程序打开图像
目前尚不清楚图像实际显示的文件格式(?)。看起来,至少根据临时文件名,它是PNG。但是,例如,使用模式F
将一些图像
对象保存为PNG或JPG不起作用!因此,看起来,图像必须以某种方式转换以使其可显示。第一个猜测是,一些常规的8位图像被选为默认图像,因为您得到的图像几乎全是黑色的,这表明值0
和可能1
被视为“非常暗”。事实上,当使用
b=Image.fromarray(b*255)
使用b.show()
时,Windows图像预览将显示正确的图像
因此,这将是显示的一个解决方法
然而,如果您想保存图像,则不必进行转换,只需使用适当的文件格式来存储这些32位信息,例如TIFF:
b=Image.fromarray(b)
b、 保存('b.tiff')