我正在使用一个使用OpenCV来检测将放在表上的卡的项目。我已经成功地检测到它使用Canny边缘。但是,对于不同的映像,必须手动调整参数。我希望我的项目可以与每个图像一起工作,而无需手动调整参数。我该怎么办?
如果你的图片包含鲜明的背景&前景,您可以自动获得阈值,如本文所述http://www.academypublisher.com/proc/isip09/papers/isip09p109.pdf。
- 为你的图像计算Otsu的阈值+二进制阈值
- 使用Otsu的阈值作为Canny算法的更高阈值。
代码:
Mat mCanny_Gray,mThres_Gray;
Mat mSrc_Gray=imread("Test.bmp",0);
double CannyAccThresh = threshold(mSrc_Gray,mThres_Gray,0,255,CV_THRESH_BINARY|CV_THRESH_OTSU);
double CannyThresh = 0.1 * CannyAccThresh;
Canny(mSrc_Gray,mCanny_Gray,CannyThresh,CannyAccThresh);
imshow("mCanny_Gray",mCanny_Gray);
可以使用亥姆霍兹原理自适应地找到Canny边缘检测器的下阈值和高阈值。
您可以参考以下链接获取论文和OpenCV c++中的实现