我正在使用一个使用OpenCV的项目来检测将放置在桌面上的卡。
我已经使用Canny Edge成功检测到它。但是,对于不同的图像,必须手动调整参数。我希望我的项目可以在不手动调整参数的情况下处理每个图像。我应该怎么办?

最佳答案

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

  • 计算图像的Otsu阈值+ Binary阈值。
  • 将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);
    
    您也可以引用this thread.

    10-08 05:02