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

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边缘检测。
源图像为:Source image OpenCV的输出为:openCV output GIMP的输出为:GIMP output 为什么openCV和GIMP的输出有如此大的差异?GIMP的输出质量远远超过openCV。

openCV被描述为实时计算机视觉。openCV的运行时间与GIMP相比如何? - Steven Rumbalski
1个回答

9
简单回答:你做错了。请参阅文档 - 你正在计算图像的d^2/(dx dy)导数,这意味着“水平边缘如何在垂直方向上改变”(或等效地,“垂直边缘如何在水平方向上改变”),也就是说,对于垂直或水平边缘,您期望输出为零(因为它在垂直于它的方向上不会发生变化)。所以,你用OpenCV的那一行代码实际上并不是边缘检测。你可能想要使用参数为1,00,1的Sobel算子,然后将这些结果平方相加,再取其平方根。这可能会得到类似于GIMP所做的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接