6

我正在使用以下参数在 openCV 中进行 Sobel 边缘检测:

cv.Sobel(mat, edgemat, 1, 1)
# mat -> source image
# edgemat -> taget output image 
# 1 -> xorder (int) – Order of the derivative x
# 1 -> yorder (int) – Order of the derivative y
# apertureSize (int) – Size of the extended Sobel kernel -> its by default set to 3

我还使用 GIMP 对图像进行了 Sobel 边缘检测。

源图像是:源图像 openCVopenCV 输出 的输出是 GIMP 的输出是GIMP 输出

为什么 openCV 和 GIMP 的输出之间存在如此大的差异。GIMP 的输出质量超过 openCV 光年。

4

1 回答 1

9

简单的回答:你做错了。请参阅文档-您正在做的是计算d^2/(dx dy)图像的导数-这意味着“水平边缘如何垂直变化”(或等效地,“垂直边缘如何水平变化”),这意味着对于垂直或您期望输出为零的水平边缘(因为它不会在垂直于它的方向上改变)。所以,你用你的 opencv 线做的根本不是边缘检测。您可能需要像 sobel1, 0这样的参数和0, 1,然后将这些结果平方并将它们相加,然后取结果的平方根。这可能会导致类似于 GIMP 正在做的事情。

于 2011-06-03T12:55:03.240 回答