我正在使用一个使用 OpenCV 的项目来检测将放在桌子上的卡片。我已经使用 Canny Edge 成功检测到它。但是,对于不同的图像,必须手动调整参数。我希望我的项目能够处理每个图像,而无需手动调整参数。我该怎么办?
问问题
8607 次
2 回答
8
如果您的图像由不同的背景和前景组成,您可以按照本文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);
你也可以参考这个线程。
于 2014-07-10T09:37:41.510 回答
2
您可以使用亥姆霍兹原理自适应地找到 Canny 边缘检测器的较低和较高阈值。
您可以参考以下链接获取论文和 OpenCV C++ 中的实现。
于 2016-11-15T09:09:56.353 回答