Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 利用OpenCV检测标记_Image Processing_Opencv_Computer Vision - Fatal编程技术网

Image processing 利用OpenCV检测标记

Image processing 利用OpenCV检测标记,image-processing,opencv,computer-vision,Image Processing,Opencv,Computer Vision,我试图检测包含彩色标记的各种对象,因此红蓝绿标记标识对象a,红蓝红标记标识对象B。我的问题是我无法使用模板匹配,因为对象可以旋转,目前,我正在考虑检查每种颜色,然后通过检查颜色之间的距离来找到对象,但这似乎效率低下,所以我的问题是,有没有更好的方法来做到这一点?您可能想尝试做局部颜色直方图,并使用颜色比率作为标识符。这是我写的一篇短文。这可能正是您所要寻找的。对于一种健壮且CPU效率较高的方法,我建议您首先使用cv::transform对图像进行变换,以便输出图像通道的非零值对应于具有您想要跟踪

我试图检测包含彩色标记的各种对象,因此红蓝绿标记标识对象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,而不是在每一帧都重新运行上述算法。在凸轮移动的情况下,如果正在跟踪的对象仍然是标记,则应在每一帧检查一次,如果要寻找稳健的跟踪器


来自跟踪的原始位置(可能还有旋转)值通常会有一些噪声。例如,如果房间里有荧光灯,并使用红蓝标记,则跟踪可能会“闪烁”一点。为了补偿,卡尔曼滤波器或扩展卡尔曼滤波器是有用的,但会引入许多需要调整/猜测的参数。

您能发布一些图像吗?