我想使用 OpenCV 检测一个与场景中其他元素明显不同的对象,因为它是灰色的。这很好,因为我可以使用 R == G == B 运行测试,并且它允许独立于亮度,但逐像素执行速度很慢。
有没有更快的方法来检测灰色的东西?也许有一个 OpenCV 方法可以进行 R == G == B 测试......cv2.inRange
进行颜色阈值处理,这不完全是我想要的。
我在 Python 中能找到的最快方法是使用切片来比较每个通道。经过几次测试运行后,该方法比两个嵌套 for 循环快 200 倍以上。
bg = im[:,:,0] == im[:,:,1] # B == G
gr = im[:,:,1] == im[:,:,2] # G == R
slices = np.bitwise_and(bg, gr, dtype= np.uint8) * 255
这将生成一个二值图像,其中灰色对象由白色像素表示。如果您不需要二值图像,而只需要一个逻辑数组,其中灰色像素由True
值,此方法变得更快:
slices = np.bitwise_and(bg, gr)
省略类型转换和乘法产生的方法比嵌套循环快 500 倍。
在此测试图像上运行此操作:
给出以下结果:
如您所见,灰色物体被正确检测到。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)