![](/img/trans.png)
[英]why does cv2.Sobel function returns a black and white image instead of grayscale image
[英]Why does the Sobel filter return a black square?
我正在尝试使用skimage
中的sobel
和prewitt
过滤器进行边缘检测来比较结果,但对于这两者我都只得到黑色方块!
那是我的代码:
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
中的大多数方法一样, sobel
function 使用np.float64
进行计算,从而将您的图像适当地转换为0.0... 1.0
范围。 接下来,您的结果b
也是np.float64
类型,其值在同一范围内。 现在转换为某些 Pillow Image
object 时,其模式设置为F
,用于32 位浮点像素。
现在, Image.show
上的文档告诉我们,例如:
在 Windows 上,使用标准 PNG 显示实用程序打开图像。
目前尚不清楚,图像实际以哪种文件格式(?)显示。 看起来,它是PNG,至少根据临时文件名。 但是,例如,将模式F
的一些Image
object 保存为 PNG 或 JPG 是行不通的,所以,看来。 必须以某种方式转换图像以使其可显示,第一个猜测是,默认选择了一些常规的 8 位图像,因为您得到几乎全黑的图像,表明值0
和可能1
被视为“非常暗”。 而且,事实上,当使用类似的东西时
b=Image.fromarray(b * 255)
Windows 图像预览在使用b.show()
时显示正确的图像。
因此,这将是显示.
不过,如果您想保存图像,则不一定需要进行转换,而只需要使用适当的文件格式来存储这些 32 位信息,例如 TIFF:
b=Image.fromarray(b)
b.save('b.tiff')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.