我试图实现对象跟踪从相机(只是一个相机,没有Z信息)。相机有720*1280分辨率,但为了更快的处理,我通常会将它重放到360*640。
这个跟踪是通过机器人摄像机完成的,我想要一个尽可能健壮的系统。
我将列出我迄今所做的工作和结果。
// Approximate contour with accuracy proportional // to the contour perimeter cv::approxPolyDP( cv::Mat(contours[i]), approx, cv::arcLength(cv::Mat(contours[i]), true) \* 0.02, true );
然后我检查了这个条件
if (approx.size() >= 4 && approx.size() <= 6)
后来我检查了一下
固体> 0.85,宽径比在0.85和1.15之间
但结果仍然不如我预期的那么强劲,尤其是规模。如果有几个方块,它就找不到所需的。
所以,现在我需要一些建议,比如我可以使用对象的其他特性来改进跟踪,以及如何改进跟踪?正如我多次提到的,主要问题之一是大小。我知道物体的大小。然而,我不知道如何利用它,因为我不知道物体与照相机的距离,这就是为什么我不知道如何用像素表示来表示物体的大小,这样我就可以消除任何其他不属于这个范围的斑点。
更新
在第三步,我描述了如何检测特定颜色的方块。下面是我得到的例子。
我用这个HSV范围来表示红色:
标量(250,129,0),标量( 255,255,255),与OpenCV的inRange函数的参数 HMIN = 250,HMAX = 255;SMIN = 129,SMAX = 255;VMIN = 0,VMAX = 255;(希望看到您关于调整此值的建议)
所以,在这张图片中,你可以看到处理过程,高斯模糊(5*5),形态学闭合两次(5*5)。标有“结果”标签的图像显示跟踪对象(请查看绿色方块)。
在第二帧中,您可以看到它无法检测到“红色方格”。这两张照片唯一的主要区别是我把笔记本电脑的盖子弯了下来(如果你没注意到的话,请仔细看一下)。我认为这是因为illumination,,这会导致阈值产生不想要的结果。
唯一的办法,我能想到的是做两个单独的图像处理。首先,像我上面所做的那样,根据颜色进行阈值处理。如果我找到要移动到下一个帧的对象。如果不使用这个opencv的查找方方法。
然而,这种方法需要对图像进行过多的处理。
发布于 2016-02-29 22:48:15
如果有一个模板是目标对象图像的图像,则尝试使用与SIFT或SURF匹配的特征。https://www.youtube.com/watch?v=ZXn69V-1kEM
intro.html
注1:您可以在灰度中使用特征匹配,这样可以缩短处理时间。
注2:您可以尝试其他的回归方法,例如人工神经网络,而不是RANSAC。
发布于 2016-03-01 20:25:16
正如您在您的要求中提到的,您只需要跟踪一个平面区域,这是一个红色。因此,您已经有两个用于跟踪目的的特性:
下面是这样一种算法:
您可以尝试的另一件事是对哈里斯角探测器进行调整:Harris角探测器。
在Harris角检测器中,利用2×2矩阵的特征值确定分数。如果这两个特征值都很小,那就意味着它是一个平坦的区域。在本OpenCV教程中解释得很好。然后,您可以使用颜色信息细化识别的平面区域。它应该合理地处理透视图转换。
发布于 2016-03-04 03:08:52
如果你重新考虑你的第二点,寻找圆圈的物体,你实际上应该寻找椭圆,因为它与物体的角度。为了检测图片中的椭圆,我复制了的“实用OpenCV”一书中的代码(你应该可以在谷歌上找到)。所用算法的理论是:all.jsp?arnumber=765658
https://stackoverflow.com/questions/35672762
复制相似问题