gpt4 book ai didi

python - cv2.findNonZero 和 Numpy.NonZero 之间的区别

转载 作者:太空狗 更新时间:2023-10-30 02:17:36 26 4
gpt4 key购买 nike

这里是个愚蠢的问题。

我想从一些黑白图像中找到像素的位置,并从 Numpy 库和 OpenCV 中找到了这两个函数。

我在网上找到的例子(http://docs.opencv.org/trunk/d1/d32/tutorial_py_contour_properties.html):

    mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
pixelpointsCV2 = cv2.findNonZero(mask)

哪个州

Numpy gives coordinates in (row, column) format, while OpenCV gives coordinates in (x,y) format. So basically the answers will be interchanged. Note that, row = x and column = y.

根据我对英文的理解,他们的解释是不是错了?不应该是:

Numpy gives coordinates in (row, column) format, while OpenCV gives coordinates in (y,x) or (column, row) format.

我的问题是:

  1. numpy 是否返回 (row,col)/(x,y) 和 OpenCV (y,x) where row =x,列=y?尽管恕我直言,它应该是 row=y, col=x?

  2. 哪个计算效率更高?在时间和资源方面。

也许我不是以英语为母语的人,所以我没有把这个简单的事情做对。

最佳答案

文档中有错误:

Numpy gives coordinates in (row, column) format, while OpenCV gives coordinates in (x,y) format. So basically the answers will be interchanged. Note that, row = x and column = y. Note that, row = y and column = x.

所以,关于你的问题:

  1. numpy 返回 (row,col) = (y,x),而 OpenCV 返回 (x,y) = (col,row)

  2. 您需要扫描整个矩阵并检索一些点。我认为性能不会有任何显着差异(应该进行测试!)。

    由于您使用的是 Python,可能最好使用 Python 工具,例如 NumPy 的。

比较这两个版本的运行时测试 -

In [86]: mask = (np.random.rand(128,128)>0.5).astype(np.uint8)

In [87]: %timeit cv2.findNonZero(mask)
10000 loops, best of 3: 97.4 µs per loop

In [88]: %timeit np.nonzero(mask)
1000 loops, best of 3: 297 µs per loop

In [89]: mask = (np.random.rand(512,512)>0.5).astype(np.uint8)

In [90]: %timeit cv2.findNonZero(mask)
1000 loops, best of 3: 1.65 ms per loop

In [91]: %timeit np.nonzero(mask)
100 loops, best of 3: 4.8 ms per loop

In [92]: mask = (np.random.rand(1024,1024)>0.5).astype(np.uint8)

In [93]: %timeit cv2.findNonZero(mask)
100 loops, best of 3: 6.75 ms per loop

In [94]: %timeit np.nonzero(mask)
100 loops, best of 3: 19.4 ms per loop

因此,使用 OpenCV 似乎在不同的数据大小上比 NumPy 对应物的速度提高了大约 3x

关于python - cv2.findNonZero 和 Numpy.NonZero 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994831/

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