我已经按照OpenCV网站上的Canny Edge Detector教程进行了测试,结果很糟糕,并且对它的工作原理感到很困惑。我用它来检测名片上的边缘,然后根据结果进行裁剪。
我正在使用这个代码,它给了我一个带有几个白色像素的全黑图像。代码基于文档。
void cannyThreshold(Mat& src_gray, Mat& dst)
{
blur(src_gray, src_gray, cv::Size(3,3));
Canny(src_gray, src_gray, 900, 890, 3);
dst = Scalar::all(0);
src_gray.copyTo(dst, src_gray);
}
有人能指出我正确的方向来检测卡的边缘吗?
答案 0 :(得分:0)
void Canny( InputArray image, OutputArray edges,
double threshold1, double threshold2,
int apertureSize=3, bool L2gradient=false );
您需要找到threshold1和threshold2的最佳值才能获得更好的结果。看HERE
答案 1 :(得分:0)
您的阈值太高。因此,而不是Canny(src_gray, src_gray, 900, 890, 3);
尝试使用以下
Canny(src_gray, src_gray, 20, 60, 3);
尝试使用不同的阈值组合。