Image processing 利用OpenCV检测标记
我试图检测包含彩色标记的各种对象,因此红蓝绿标记标识对象a,红蓝红标记标识对象B。我的问题是我无法使用模板匹配,因为对象可以旋转,目前,我正在考虑检查每种颜色,然后通过检查颜色之间的距离来找到对象,但这似乎效率低下,所以我的问题是,有没有更好的方法来做到这一点?您可能想尝试做局部颜色直方图,并使用颜色比率作为标识符。这是我写的一篇短文。这可能正是您所要寻找的。对于一种健壮且CPU效率较高的方法,我建议您首先使用cv::transform对图像进行变换,以便输出图像通道的非零值对应于具有您想要跟踪的颜色的斑点。比如说,Image processing 利用OpenCV检测标记,image-processing,opencv,computer-vision,Image Processing,Opencv,Computer Vision,我试图检测包含彩色标记的各种对象,因此红蓝绿标记标识对象a,红蓝红标记标识对象B。我的问题是我无法使用模板匹配,因为对象可以旋转,目前,我正在考虑检查每种颜色,然后通过检查颜色之间的距离来找到对象,但这似乎效率低下,所以我的问题是,有没有更好的方法来做到这一点?您可能想尝试做局部颜色直方图,并使用颜色比率作为标识符。这是我写的一篇短文。这可能正是您所要寻找的。对于一种健壮且CPU效率较高的方法,我建议您首先使用cv::transform对图像进行变换,以便输出图像通道的非零值对应于具有您想要跟踪
b g r bias
r' [ -1 -1 1 -15 ]
b' [ 1 -1 -1 -15 ]
是一个变换矩阵,将非常红色像素的非零值分配给第一个输出通道,非常蓝色像素的非零值分配给第二个输出通道
然后,可以在输出通道上逐个运行cv::findContours,以找到颜色合适的斑点。然后,通过遍历对、三元组等的斑点并对它们进行几何检查(例如,如果标记由蓝色、红色和绿色圆圈组成),则应该检查这三个斑点是“圆形的”足够的形状并彼此靠近,以将它们标记为标记而不仅仅是噪声。标记可以被定位。
为了跟踪它们,您可以在运行cv::transform之后,对基于meanShift的跟踪应用某种CAMShift,而不是在每一帧都重新运行上述算法。在凸轮移动的情况下,如果正在跟踪的对象仍然是标记,则应在每一帧检查一次,如果要寻找稳健的跟踪器
来自跟踪的原始位置(可能还有旋转)值通常会有一些噪声。例如,如果房间里有荧光灯,并使用红蓝标记,则跟踪可能会“闪烁”一点。为了补偿,卡尔曼滤波器或扩展卡尔曼滤波器是有用的,但会引入许多需要调整/猜测的参数。您能发布一些图像吗?