首页 > 解决方案 > OpenCV 和 Matplotlib 以不同的方式显示图像

问题描述

我试图在经过一些处理后绘制图像。我使用下面的三个选项获得了三个不同的图像。获得的图像是在道路车道图像上应用两次 Sobel 滤波器后得到的。

sample_image.jpg 下面的 Python 代码显示了三种绘图方法。

    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 的结果一样保存输出图像?

先感谢您!

标签: python-3.xopencvmatplotlibopencv3.0

解决方案


为什么图像以不同的方式显示?

OpenCV 和 Matplotlib 使用不同的色彩空间来显示图像——这就是为什么即使它们实际上相同,它们看起来也不同的原因。

至于您的前两种方法,它们实际上应该看起来相同,并且当我尝试您的代码时它们会这样做。

如何像方法 3 的结果一样保存输出图像?

Matplotlib 有一个内置函数可以将绘制的图像写入光盘,只需使用:

plt.savefig('your_filename.png')

推荐阅读