我正在使用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中是否有任何功能可以加速搜索?
提前致谢。
答案 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)