opencv 拉普拉斯函数无法像文档中那样有效工作

问题描述 投票:0回答:2

这是我的代码

img_original=cv2.imread("sudoku-original.jpg",0)
cv2.imshow("original",img_original)
laplacian = cv2.Laplacian(img_original,cv2.CV_64F)
cv2.imshow("laplace",laplacian)

我想要像文档中那样的结果,但它没有。

这里是文档链接:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_gradients/py_gradients.html#gradients

enter image description here

opencv
2个回答
3
投票
laplacian = cv2.Laplacian(img_original,cv2.CV_64F)

上面的行意味着图像的格式是 CV_64F,它是一个浮点值数组。因此,当您使用 cv2.imshow() 函数时,它的工作方式如下:大于 1.0 的值将是白色像素,小于 0.0 的值将是黑色。

因此您需要将其转换为 CV_8U。有很多方法可以做到, 我一般用这个:

laplacian = cv2.Laplacian(img,cv2.CV_64F)
ret,thresh = cv2.threshold(laplacian,0,255.0,cv2.THRESH_TOZERO)
laplacian8 = np.uint8(thresh)
cv2.imshow('sud',laplacian8)

这给了我结果:

Result

检查this链接以了解有关该问题的更多信息。


0
投票

-更改 ksize 和 ddepth 参数后,生成的图像与 OpenCV python 教程中的示例相匹配:

img = cv.imread(cv.samples.findFile('sudoku.png'), cv.IMREAD_GRAYSCALE)

laplacian = cv.Laplacian(img,cv.CV_8U, ksize=3)
 
plt.subplot(1,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(1,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
 
plt.show()

在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.