5

根据我的研究,Canny Edge Detector 对于检测图像的边缘非常有用。经过我的努力,我发现OpenCV函数可以做到这一点,即

    Imgproc.Canny(Mat image, Mat edges, double threshold1, double threshold2)

但是对于低阈值和高阈值,我知道不同的图像有不同的阈值,请问有没有快速自适应阈值的方法可以根据不同的图像自动分配低阈值和高阈值?

4

2 回答 2

5

这相对容易做到。查看有关该主题的较早的SO 帖子

一种快速的方法是计算当前图像的均值和标准偏差,并将 +/- 一个标准偏差应用于图像。

C++ 中的示例类似于:

Mat img = ...;
Scalar mu, sigma;
meanStdDev(img, mu, sigma);

Mat edges;
Canny(img, edges, mu.val[0] - sigma.val[0], mu.val[0] + sigma.val[0]);

另一种方法是计算图像的中值,并以高于和低于中值的比率为目标(例如0.66*medianValue1.33*medianValue)。

希望有帮助!

于 2012-10-03T00:10:09.260 回答
3

Opencv 有一个自适应阈值函数。使用 OpenCV4Android 是这样的:

Imgproc.adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C);

一个例子:

Imgproc.adaptiveThreshold(mInput, mInput, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4);

至于如何选择参数,您必须阅读文档以获取更多详细信息。为每个图像选择正确的阈值是一个完全不同的问题。

于 2012-10-04T09:30:15.633 回答