我在openCV中使用内置的Sobel边缘操作用于某些图像处理目的,但是结果与该函数的预期不符。

sobel=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
cv2.imshow('Sobel Image',sobel)

我将附加输入图像的样本图像以及得到的结果输出。
请帮助我。
左边是输入图像,右边是合成图像。

image - 使用opencv进行Sobel边缘检测-LMLPHP

最佳答案

您必须进行两次sobel操作并将其混合。另外,请确保您正在处理灰度图像,否则我认为它将单独处理每个通道。

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

grad_x = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3)
grad_y = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3)

abs_grad_x = cv2.convertScaleAbs(grad_x)
abs_grad_y = cv2.convertScaleAbs(grad_y)

grad = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)

cv2.imshow('grad X',grad_x)
cv2.imshow('grad Y',grad_y)
cv2.imshow('Sobel Image',grad)
cv2.waitKey()
xy和混合图像的结果为:

image - 使用opencv进行Sobel边缘检测-LMLPHP

如果需要减少噪音,可以应用高斯模糊。参考:https://docs.opencv.org/4.2.0/d2/d2c/tutorial_sobel_derivatives.html

关于image - 使用opencv进行Sobel边缘检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51167768/

10-12 23:21