【发布时间】:2017-06-27 18:09:01
【问题描述】:
我做了一个非常简单的程序,它读取图像,评估 sobel 过滤器,然后用 imshow 呈现它。
import cv2
img = cv2.imread("/home/alex/imagens/train_5.jpg")
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) # x
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
norm = cv2.magnitude(sobelx, sobely)
normUint8 = norm.astype('uint8')
cv2.imshow("img", img)
cv2.imshow("norm", norm)
cv2.imshow("normUint8", normUint8)
print "img=" + str(img.dtype) + ", sobel=" + str(norm.dtype) + ", normUint8=" + str(normUint8.dtype)
cv2.waitKey(0)
cv2.destroyAllWindows()
我预计显示 norm 和 normUint8 的结果会相同或非常相似,因为它们的值在每个像素处的差异小于 1。 因此,当我使用 CV_64FC3 图像时,我相信 opencv 在呈现之前正在执行一些操作。
我有兴趣找到这个操作以便使用它。
有人可以帮忙吗?
在这里我附上我使用的原始图像。
谢谢。
【问题讨论】:
-
您使用的是哪个版本的
opencv?您正在使用名称“img”、“norm”和“normUint8”显示带有imshow()的图像,但您呈现的结果有其他名称(img、sobel 和 saved_sobel),您确定它们没问题吗? -
我确定。我更改了代码并没有更改图像。我会解决的。
-
我在 ubuntu 16.04 上使用 synaptic 包中的 2.4.9 版本。
-
这里是该代码对应的正确图片:ibb.co/gBiBck