我想优化我的程序,其中我使用描述的颜色对象跟踪算法here .唯一的区别是我使用的是 cvBlob 库,而不是 cv::moments(cvBlob 更快更准确)。使用探查器(valgrind + kcachegrind)我发现色彩空间转换方法(cv::cvtColor;我正在跟踪三种颜色的对象)占用了大约 29% 的时间。我正在从 BGR 转换为 HSV。
我在一些论文中读到,使用 YCbCr 颜色空间在颜色跟踪方面甚至更好。从 BGR 转换为 YCbCR 是个好主意吗?它应该稍微快一点,因为它需要更少的乘法(我不确定——我不知道 OpenCv 内部是如何做到的)。此算法是否需要一些更改,或者我是否可以将跟踪颜色的下边界和上边界从 HSV 转换为 YCbCr,然后使用 inRangeS 方法,就像我对 HSV 所做的那样?
有没有办法从 YcbCr(或 YUV)中的驱动程序获取帧?我不是在问 HSV,因为这不受 v4l2,AFAIR 的支持。
您还有其他想法吗?我不想使用 IPP 或 GPU。
最佳答案
查看 cvtColor
的 OpenCV 文档.它讨论了使用 cvtColor
在 BGR2YCbCr
之间进行转换。
(请尝试并在这里评论结果,即在 YCbCr 模式下花费的总时间的百分比。因为它将在未来帮助很多人。)
关于c++ - OpenCV——如何优化颜色跟踪程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203675/