如何使用OPENCV有效地定位和保存具有特定值的像素?

时间:2015-07-22 19:15:24

标签: python performance opencv

我正在使用OpenCV搜索二进制图像并将所有白色像素提取到列表中。
但是,我的过程大约需要10-12秒,我正在努力尽可能地提高效率。

这是我拥有的(thresh2是阈值后的图像):

h,w=thresh2.shape[:2]
WhitePix=[]
for in range(0,h):
   TstVal=thresh2[i]
   if TstVal.max()=255:
      for j in range(0,w):
         if thresh2[i,j]==255:
            WhitePix.append([i,j])

我检查每一行是否有白色像素,如果有,我将它附加到我的列表中。

OpenCV中是否有任何功能可以加速搜索?

提前致谢。

2 个答案:

答案 0 :(得分:0)

看来你的thresh2是一个numpy数组。如果是这种情况,为什么不直接使用numpy过滤,效率更高:thresh2.nonzero()将返回白色像素的索引。然后,您可以直接使用它来掩盖您的数组:thresh2[thresh2.nonzero()]或您想要做的任何事情......

一般来说,在python中,可以避免的循环应该是。

答案 1 :(得分:0)

您可以通过两种方式实现:

1)使用Numpy功能

pixelpoints = np.transpose(np.nonzero(mask))

2)使用OpenCV功能

pixelpoints = cv2.findNonZero(mask)