6

我正在使用一个使用 OpenCV 的项目来检测将放在桌子上的卡片。我已经使用 Canny Edge 成功检测到它。但是,对于不同的图像,必须手动调整参数。我希望我的项目能够处理每个图像,而无需手动调整参数。我该怎么办?

4

2 回答 2

8

如果您的图像由不同的背景和前景组成,您可以按照本文http://www.academypublisher.com/proc/isip09/papers/isip09p109.pdf中的说明自动获取阈值。

  1. 计算图像的 Otsu 阈值 + 二进制阈值。
  2. 使用 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 回答