【发布时间】:2019-03-26 15:03:40
【问题描述】:
我已将两个图像转换为 numpy 数组
image1Array
image2Array
两个图像都已转换为灰度,因此只有0 或255 值。
在这两个示例中,顶部(和底部)都有很多行白色:
[255 255 255 255 .... 255 255 255 255]
我相信我所说的“行”实际上是一个数组。我是使用 Numpy 的新手。因此,图像中的每一行都有一个数组,该行中的每个像素都用0 或255 表示。
如何找到包含黑色0 像素的第一行和包含黑色0 像素的最后一行?我应该可以用它来计算高度。在这些示例中,这应该是大致相同的数字。
我相信numpy.where(image1Array == 0)[0] 正在返回每个黑色像素的行; min() 和 max() 这似乎是我正在寻找的东西,但我还不确定。
相反,如何找到每张图片的宽度?在这些示例中,Image 2 的宽度数应大于 Image 1
编辑
我想我只需要这样的东西:
高度(第一行黑色像素与最后一行黑色像素的差):
(max(numpy.where(image1Array == 0)[0])) - (min(numpy.where(image1Array == 0)[0]))
宽度(黑色像素的最低列值与黑色像素的最高列值之差):
(max(numpy.where(image1Array == 0)[1])) - (min(numpy.where(image1Array == 0)[1]))
到目前为止,我的测试表明这是正确的。比较上例中的两个图像,它们的高度相等,而 image2Array 的宽度是 image1Array 的两倍。
【问题讨论】:
-
您可能对boolean array indexing、
np.any和np.where感兴趣。 -
@Rock Li,我正在寻找“盒子”内形状的大小。我需要从等式中消除所有边上的空白。
-
对不起。我明白你现在想要做什么。我认为你可以做的是
x, y = np.where(array==0)然后shape = (np.amax(x) - np.amin(x) + 1, same for y + 1) -
那么你想要白色边距的大小(上、右、下、左)、黑色方块的大小(宽度和高度)还是包含黑色方块的数组?
-
@Rocky Li,我不确定是不是这样。我要返回成对的相同号码。 (55, 55) 和 (81,81)。当第二个看起来应该是 (55, 110) 时