gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:52:05 27 4
gpt4 key购买 nike

我已经使用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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com