python - 获取颜色的第一个和最后一个位置

标签 python numpy opencv

我已经使用OpenCV创建了图像的蒙版

Mask of image

我想知道是否有可能获得第一个和最后一个白色像素的X和Y位置并将其存储为变量,请参见下图。

enter image description here

我当时想我可以将图像转换为numpy数组,并循环比较每一行与上一行的位置,但是对于较大的图像,这可能会占用大量CPU资源。

有没有更快的方法来获取信息?

我可以发布代码来显示以上内容,但是潜在的问题是,是否有比扫描和比较每一行更快的方法。

最佳答案

实现此目的的一种方法是使用 scipy.ndimage.find_object()

假设您的输入仅由10组成,则代码为:

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/

相关文章:

python - 为数据框中的每一行查找 n 个最低值

python - 如何从 Django Web 应用程序运行系统命令?

python - 移植旧的fortran程序以与python + numpy一起使用

Python valueError 使用 hstack() (ValueError : all the input array dimensions except for the concatenation axis must match exactly)

opencv - 使用 OpenCL 和 GPU 不会提高我的相机的 fps 性能

python - 在python中从PDF中提取图像而不重新采样?

python - Numpy 对 2D 数组进行操作以生成 3D 数组

python - 将系列映射到 min(list, key=lambda x : abs(series)) function

python - 如何在cv2 python中将灰色图像转换为彩色图像

c# - OpenCV/EmguCV 人脸识别