使用 cv::inRange (OpenCV) 选择最佳 HSV 边界进行颜色检测
在图像处理中,经常使用 HSV 颜色空间用于颜色检测。选择适当的 HSV 上下边界对于准确识别目标颜色至关重要。本问题探讨了咖啡罐上包含橙色盖子的图像的选择过程。
尽管为盖子提供了估计的 HSV 中心值 (22, 59, 100),但最初尝试使用边界 (18 、40、90) 和 (27、255、255) 的结果并不令人满意。为了解决这个问题,我们必须考虑 HSV 比例和图像格式中的潜在问题。
问题 1:HSV 比例差异
不同的应用程序可能使用不同的 HSV 比例。 GIMP采用H=0-360,S=0-100,V=0-100,而OpenCV采用H:0-179,S:0-255,V:0-255。在这种情况下,GIMP 色调值 (22) 应减半以匹配 OpenCV 的比例,导致范围为 (5, 50, 50) - (15, 255, 255)。
问题2:图像格式转换
OpenCV 操作的是 BGR 格式的图像,而不是 RGB。因此,需要将颜色转换行修改为cv.CvtColor(frame,frameHSV,cv.CV_BGR2HSV)。这确保了图像在 HSV 边界检测之前正确转换。
通过合并这些调整,我们获得了更有希望的结果:
[改进的检测图像]
虽然输出并不完美,它改进了对橙色盖子的检测。通过选择与盖子相对应的最大轮廓,可以最大限度地减少错误检测。
结论
选择适当的 HSV 边界需要考虑尺度差异和适当的图像格式转换。通过解决这些问题,我们可以在 OpenCV 中使用 cv::inRange 来提高颜色检测的准确性。
以上是如何在 OpenCV 中优化 HSV 边界以实现准确的颜色检测?的详细内容。更多信息请关注PHP中文网其他相关文章!