我想检测下面的形状,我尝试了以下方法:
1)使用opencv_traincascade
训练级联并使用opencv_createsamples
创建正面图像 - 没有成功,很多误报,对象没有很多功能。
2)尝试进行椭圆检测,再次出现大量误报,因为场景中有许多椭圆。此外,它没有给出可靠的检测,因为它不是一个完美的椭圆。
3)尝试颜色检测,效果很好但物体有多种颜色,范围从绿色,红色,蓝色和黄色,因此颜色不能用于检测。此外,它因照明而变化。
我想知道我是否可以使用边缘或其他方式训练分类器来定制形状并在场景中检测到它。
Results using canny edge detection
非常感谢任何帮助。
答案 0 :(得分:0)
也许你可以尝试这样的事情。之后你就有了边缘图像:
findContours()
获取分离的轮廓。convexHull
以获得具有该轮廓的形状。convexHull
:这将是您在每个新图像中查找的模板。Normalized Cross Correlation
并找到具有最大相关性的坐标。这种方法有一个很强的假设:你要寻找的形状不会改变它的旋转或它的比例。如果你想对旋转和缩放保持不变,你应该应用另一种方法来比较模板和Imgae(例如匹配旋转和缩放不变的模板,例如:http://www.cv-foundation.org/openaccess/content_cvpr_2013/papers/Korman_FasT-Match_Fast_Affine_2013_CVPR_paper.pdf)