zoukankan      html  css  js  c++  java
  • 关于matplotlib与opencv读取和显示图片

    在这里插入图片描述
    最近在做一个图像处理的大作业,涉及到matplotlib与OpenCV的一些图片读取与显示的问题,感觉非常有意思,需要把它彻底掌握理解,遂写一篇博客记录一下自己的学习笔记,以备遗忘时能迅速找回知识点。希望对自己CV的学习有一些帮助。好,我们开始吧。

    import cv2  # 利用opencv读取图像
    import numpy as np
    import matplotlib.pyplot as plt # 利用matplotlib显示图像
    
    path = 'C:/Users/86187/Desktop/image/'
    img = cv2.imread(path + "lena.png") #读取图像
    # OpenCV显示图像
    cv2.imshow('lena', img)
    cv2.waitKey(0)
    

    在这里插入图片描述
    这是lena女神的原图,OpenCV读取并显示的结果。
    那我们用OpenCV读取,用matplotlib显示效果如何呢?

    # matplotlib显示图像
    plt.imshow(img)
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    看,图片就像变了个颜色似的,看来这样显示是有问题的。这到底是怎么回事儿呢?原来啊,OpenCV读取图片(cv2.imread())后,图像的颜色通道顺序是[B, G, R],和matplotlib读取图片(plt.imread())后,图像的颜色通道顺继续[R, G, B]恰好是相反的。
    这是,我们要想让图片正常显示,需要进行通道交换。

    img = img[:,:,(2,1,0)] # 交换B和R通道
    # matplotlib显示图像
    plt.imshow(img)
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    现在就正常了!
    接下来是matplotlib显示灰度图的问题。

    img = cv2.imread(path + 'lena.png', 0)
    cv2.imshow('lena', img)
    cv2.waitKey(0)
    

    在这里插入图片描述
    我们看到图像已经成功转换为了灰度图。
    接下来我们用matplotlib来显示看看。

    img = cv2.imread(path + 'lena.png', 0)
    plt.imshow(img)
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    看,明明显示的是灰度图,它怎么突然有颜色了呢?你说无中生有也就罢了,怎么还变成了绿色??
    原来啊,matplotlib显示图像,默认以三通道显示图像,我们需要在plt.imshow()里添加参数。

    img = cv2.imread(path + 'lena.png', 0)
    plt.imshow(img, cmap='gray')
    plt.axis('off')
    plt.show()
    

    在这里插入图片描述
    看,这下就OK了吧!
    参考内容–>传送门

  • 相关阅读:
    区块链学习一
    loadrunner json参数化
    python造数
    loadrunner json中文无法识别问题
    mysql慢查询
    loadrunner请求json数据参数化问题
    调用短信接口的原理流程,以及入参和返回值分别是什么?
    Linux
    MySql
    nginx负载均衡
  • 原文地址:https://www.cnblogs.com/Jack-Tim-TYJ/p/12831899.html
Copyright © 2011-2022 走看看