Python 3.x OpenCV和Matplotlib以不同的方式显示图像
经过一些处理后,我正试图绘制一幅图像。我使用下面的三个选项获得三个不同的图像。在道路车道图像上应用Sobel滤波器两次后获得图像 下面的Python代码显示了三种绘图方法Python 3.x OpenCV和Matplotlib以不同的方式显示图像,python-3.x,opencv,matplotlib,opencv3.0,Python 3.x,Opencv,Matplotlib,Opencv3.0,经过一些处理后,我正试图绘制一幅图像。我使用下面的三个选项获得三个不同的图像。在道路车道图像上应用Sobel滤波器两次后获得图像 下面的Python代码显示了三种绘图方法 img = cv2.imread('sample_image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gaussian = cv2.GaussianBlur(gray,(3,3),0) sobely = cv2.Sobel(ga
img = cv2.imread('sample_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gaussian = cv2.GaussianBlur(gray,(3,3),0)
sobely = cv2.Sobel(gaussian,cv2.CV_64F,1,0,ksize=5) # y
sobelyy = cv2.Sobel(sobely,cv2.CV_64F,1,0,ksize=5) # y
# method 1
cv2.imshow('sobelyy', sobelyy)
# method 2
cv2.imwrite('filtered_img1.JPG', sobelyy)
s_img = cv2.imread('filtered_img1.JPG')
cv2.imshow('s_img', s_img)
# method 3
plt.figure()
plt.imshow(sobelyy, cmap='gray')
plt.title('Filtered sobelyy image, B(x,y)'), plt.xticks([]), plt.yticks([])
plt.show()
我得到的图像是:
我想得到的图像是在方法3中得到的
为什么图像以不同的方式显示?
如何像方法3的结果那样保存输出图像
提前谢谢你
为什么图像以不同的方式显示
OpenCV和Matplotlib使用不同的颜色空间来显示图像-这就是为什么即使它们实际上是相同的,它们看起来也不同
至于你的前两个方法,它们看起来应该是一样的,当我尝试你的代码时,它们是一样的
如何像方法3的结果那样保存输出图像
Matplotlib有一个内置函数,可将打印图像写入光盘,只需使用:
plt.savefig('your_filename.png')
请提供一份完整的文件,即复制所述行为所需的全部代码和图像。您正在处理
float
类型图像吗?我总结了代码,以便于复制。我正在处理uint8类型的图像。非常感谢。您的sobely
和sobelyy
是float
,因为您在这里明确设置了:cv2.Sobel(gaussian,cv2.CV_64F,1,0,ksize=5)
,在相应范围内有任何负值和正值。OpenCV的imshow
和imwrite
方法需要某些类型和范围,例如uint8
和范围[0…255]
中的值。Matplotlib的imshowimshow
能够适当缩放任何范围。这是使用OpenCV和Matplotlib时常见的错误源。缩放sobelyy并适当设置其类型,使用OpenCV也可以获得所需的结果。