在 numpy 数组中查找包含黑色像素的第一行和最后一行
Finding the first and last rows that contain a black pixel, in a numpy array
我有一个三角形的黑白图像(它只包含 0 和 255 像素值)。
我已将其转换为名为 myArray
的 numpy 数组
目前,我可以通过以下代码找到三角形底部的width
(黑色像素的数量):
width = (max(numpy.where(myArray == 0)[1])) - (min(numpy.where(myArray == 0)[1]))
如果三角形被倒置,width
将应用于倒置三角形的顶部。
我想做的是确定三角形是向上还是向下。
我可以找到包含黑色像素的第一行,然后计算该行中黑色像素的数量,调用此 firstRow
并找到包含黑色像素的最后一行,并计算该行中黑色像素的数量,调用 lastRow
那么,如果firstRow
<
lastRow
,三角形是向上的。
计算 firstRow
和 lastRow
的最佳方法是什么?
用myArray
用255表示黑色像素如
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 255., 0., 0., 0., 0.],
[ 0., 0., 0., 255., 255., 255., 0., 0., 0.],
[ 0., 0., 255., 255., 255., 255., 255., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
在 axis=1
上使用 sum
后,您可以使用 np.where
获得至少有一个黑色像素的所有行:
print (np.where(myArray.sum(axis=1)))
(array([3, 4, 5], dtype=int64),)
如果你想得到黑色像素最大的行,你可以在sum
后使用np.argmax
on axis=1
:
print (np.argmax(myArray.sum(axis=1)))
5
要知道三角形是向上还是向下,一种方法是检查 argmax
是否是 np.where(myArray.sum(axis=1))
中的 np.max
元素,然后它会向上。
myArray_sum = myArray.sum(axis=1)
if np.max(np.where(myArray_sum)) == np.argmax(myArray_sum):
print ('up')
else:
print ('down')
如果你想要第一行和最后一行,这里有一种方法,但它与黑色像素的值有关。
myArray_sum = myArray.sum(axis=1)
firstRow = np.argmax(myArray_sum == 255)
lastRow = np.argmax(myArray_sum)
我有一个三角形的黑白图像(它只包含 0 和 255 像素值)。
我已将其转换为名为 myArray
目前,我可以通过以下代码找到三角形底部的width
(黑色像素的数量):
width = (max(numpy.where(myArray == 0)[1])) - (min(numpy.where(myArray == 0)[1]))
如果三角形被倒置,width
将应用于倒置三角形的顶部。
我想做的是确定三角形是向上还是向下。
我可以找到包含黑色像素的第一行,然后计算该行中黑色像素的数量,调用此 firstRow
并找到包含黑色像素的最后一行,并计算该行中黑色像素的数量,调用 lastRow
那么,如果firstRow
<
lastRow
,三角形是向上的。
计算 firstRow
和 lastRow
的最佳方法是什么?
用myArray
用255表示黑色像素如
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 255., 0., 0., 0., 0.],
[ 0., 0., 0., 255., 255., 255., 0., 0., 0.],
[ 0., 0., 255., 255., 255., 255., 255., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
在 axis=1
上使用 sum
后,您可以使用 np.where
获得至少有一个黑色像素的所有行:
print (np.where(myArray.sum(axis=1)))
(array([3, 4, 5], dtype=int64),)
如果你想得到黑色像素最大的行,你可以在sum
后使用np.argmax
on axis=1
:
print (np.argmax(myArray.sum(axis=1)))
5
要知道三角形是向上还是向下,一种方法是检查 argmax
是否是 np.where(myArray.sum(axis=1))
中的 np.max
元素,然后它会向上。
myArray_sum = myArray.sum(axis=1)
if np.max(np.where(myArray_sum)) == np.argmax(myArray_sum):
print ('up')
else:
print ('down')
如果你想要第一行和最后一行,这里有一种方法,但它与黑色像素的值有关。
myArray_sum = myArray.sum(axis=1)
firstRow = np.argmax(myArray_sum == 255)
lastRow = np.argmax(myArray_sum)