【发布时间】:2017-04-21 03:50:29
【问题描述】:
我想检测下面的形状,我尝试了以下方法:
1) 使用opencv_traincascade 训练级联并使用opencv_createsamples 创建正图像 - 没有成功,有很多误报,对象没有很多特征。
2) 尝试进行椭圆检测,再次出现大量误报,因为场景中有很多椭圆。此外,它没有给出可靠的检测,因为它不是一个完美的椭圆。
3) 尝试过颜色检测,效果不错,但物体有多种颜色,从绿色、红色、蓝色和黄色不等,因此无法使用颜色进行检测。此外,它会因光照而变化。
我想知道是否可以使用边缘或其他自定义形状并在场景中检测的方式来训练分类器。
Results using canny edge detection
任何帮助将不胜感激。
【问题讨论】:
-
你试过轮廓提取和
cv::matchShapes吗?我发现倒角匹配非常好,但它需要一些特定于任务的优化来处理必要的情况,如对象旋转、对象缩放和透视扭曲。 docs.opencv.org/2.4/modules/imgproc/doc/… -
我会查看Nature Conservancy Kaggle 竞赛讨论板。有很多关于类似问题的讨论。
-
@Micka 谢谢你,我已经尝试过轮廓提取但没有尝试
cv::matchShapes会尝试一下。 @Tchotchke 太棒了,感谢您指出我的方向 - 将查看讨论。 -
@Micka 关于使用
cv::matchShapes,为了获得整个图像的实时结果,想法是在不同的尺度上使用滑动窗口方法并使用返回到的系数区分匹配和不匹配?如果不是,那么如何提取包含匹配良好对象的边界框。 -
您应该在边缘检测或阈值处理后提取轮廓(参见 cv::findContours)并比较形状(每个图像轮廓与目标轮廓)。如果可以的话,尽量提前消除轮廓(通过颜色或其他)。
标签: opencv image-processing machine-learning computer-vision pattern-recognition