【发布时间】:2015-04-28 19:46:21
【问题描述】:
我的代码中加载了一个图像(非常长且不必要,不会在此处发布),我需要使用 skimage 来检测图像中的斑点。但是由于某种原因,我使用的所有图像和尝试都不起作用。
PIL 在上面的代码中修改了图像,使我试图找到的对象只有白色(255、255、255),而所有其他像素都是黑色。这段代码只需要识别这些的位置。我尝试了许多不同的方法来让它工作(将它们转换为 numpy 数组,而不是将它们转换为 numpy 数组等。)
我按照这些说明进行操作:http://scikit-image.org/docs/dev/auto_examples/plot_blob.html 用于基础知识,但这并不是真正的教程,而是一个示例。
我认为 rgb2gray 函数存在问题,因为它只返回 0,而 print(numpy.array(img)) 返回的值介于 0 和 1 之间,这表明信息丢失是在调用 rgb2gray 时。
这是似乎有问题的代码:
img_gray = rgb2gray(numpy.array(img)) # Convert to numpy array for skimage
print(img_gray)
print(numpy.array(img))
img_blobs = blob_doh(img_gray, threshold=0.01, max_sigma=500)
print(img_blobs)
我该如何解决这个问题?
编辑:
以下是每个图像、数组和列表的打印内容:
[[ 0. 0. 0. ..., 0. 0. 0. ] #img_gray
[ 0. 0.00392157 0.01568627 ..., 0. 0. 0. ]
[ 0. 0.01176471 0.05882353 ..., 0. 0. 0. ]
...,
[ 1. 0.99607843 0.96078431 ..., 0. 0. 0. ]
[ 1. 1. 0.98039216 ..., 0. 0. 0. ]
[ 1. 1. 0.99215686 ..., 0. 0. 0. ]]
[[[ 0 0 0] #img
[ 0 0 0]
[ 0 0 0]
...,
[ 0 0 0] #img
[ 0 0 0]
[ 0 0 0]]
[[ 0 0 0] #img
[ 1 1 1]
[ 4 4 4]
...,
[ 0 0 0] #img
[ 0 0 0]
[ 0 0 0]]
[[ 0 0 0] #img
[ 3 3 3]
[ 15 15 15]
...,
[ 0 0 0] #img
[ 0 0 0]
[ 0 0 0]]
...,
[[255 255 255] #img
[254 254 254]
[245 245 245]
...,
[ 0 0 0] #img
[ 0 0 0]
[ 0 0 0]]
[[255 255 255] #img
[255 255 255]
[250 250 250]
...,
[ 0 0 0] #img
[ 0 0 0]
[ 0 0 0]]
[[255 255 255]
[255 255 255]
[253 253 253]
...,
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]]
[] #img_blobs
【问题讨论】:
-
你能发帖
max(img), min(img), img.dtype吗? -
尝试在 rgb2gray() 之前创建 np.array(img) 并打印出你之前和之后的内容(正如 Matthew 建议检查 shape 和 dtype)尝试制作自己的小型测试数组(8 ,8,3) astype(np.uint8) 等,看看是否有任何特定的东西阻止它工作。
-
max(img)、min(img) 和 img.dtype 在运行时都会引发错误(图像类型不可迭代且 dtype 不是 img 的属性)在 rgb2gray() 之前创建数组什么都没有,但是在帖子的编辑部分中,它显示了(按顺序)img_gray、img、然后是 img_blobs(检测到的 blob)的测试打印输出。
-
阅读打印输出后,img_gray 似乎包含一些东西,但使用
PIL.Image.fromarray(img_gray).show()时,我只得到黑色图像。
标签: python arrays image numpy pep3118