我已经使用OpenCV创建了图像的蒙版
我想知道是否有可能获得第一个和最后一个白色像素的X和Y位置并将其存储为变量,请参见下图。
我当时想我可以将图像转换为numpy数组,并循环比较每一行与上一行的位置,但是对于较大的图像,这可能会占用大量CPU资源。
有没有更快的方法来获取信息?
我可以发布代码来显示以上内容,但是潜在的问题是,是否有比扫描和比较每一行更快的方法。
最佳答案
实现此目的的一种方法是使用 scipy.ndimage.find_object()
。
假设您的输入仅由1
和0
组成,则代码为:
import numpy as np
import scipy as sp
import scipy.ndimage
arr = np.array([[0, 0, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]])
print(arr)
# [[0 0 0 0]
# [0 1 1 0]
# [0 0 1 0]
# [0 1 0 0]
# [0 0 0 0]]
slicings = sp.ndimage.find_objects(arr)
print(slicings)
# [(slice(1, 4, None), slice(1, 3, None))]
# : compute corners
# slicings information is: `slicings[label_index][dimension_index]`
top_left_corner = slicings[0][0].start, slicings[0][1].start
bottom_right_corner = slicings[0][0].stop - 1, slicings[0][1].stop - 1
print(top_left_corner)
# (1, 1)
print(bottom_right_corner)
# (3, 2)
实际上,
find_object()
更复杂,可以用于不同的标签,请查阅其文档以获取有关如何在不同情况下使用它的更多信息。如果您的输入不是二进制的,则可以使用比较将其设置为二进制,例如
arr > 0
将产生一个 bool(boolean) 数组(假设arr
是一个NumPy数组)。
关于python - 获取颜色的第一个和最后一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59334191/