openCV vs GIMP,openCV中的边缘检测失败

Xol*_*lve 6 python opencv gimp edge-detection

我正在使用以下参数在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
Run Code Online (Sandbox Code Playgroud)

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

源图像是: 来源图片 openCV的输出是 openCV输出 GIMP的输出是 GIMP输出

为什么openCV和GIMP的输出之间有这么大的差异.GIMP的产量质量超过openCV光年.

eta*_*ion 9

简单的回答:你做错了.请参阅文档 - 您正在做的是计算d^2/(dx dy)图像的导数 - 这意味着"水平边缘如何垂直变化"(或等效地,"垂直边缘如何水平变化"),这意味着,对于垂直或水平边缘,你期望输出为零(因为它不会在垂直于它的方向上改变).那么,你使用opencv线路所做的事情根本就不是边缘检测.你可能想要像索贝尔1, 0这样的参数作为参数0, 1,然后将这些结果加起来并加起来,然后取结果的平方根.这可能会导致GIMP正在做的事情.