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