【OpenCV 例程300篇】04. 用 matplotlib 显示图像(plt.imshow)

本文介绍了如何使用matplotlib库显示OpenCV处理的图像,包括BGR到RGB的颜色转换以及灰度图像的显示。通过实例展示了在不进行颜色转换时,彩色图像显示可能出现的颜色异常,同时指出了设置cmap参数对于正确显示灰度图像的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

专栏地址:『youcans 的 OpenCV 例程300篇 - 总目录』
01. 图像的读取(cv2.imread)
02. 图像的保存(cv2.imwrite)
03. 图像的显示(cv2.imshow)
04. 用 matplotlib 显示图像(plt.imshow)


【youcans 的 OpenCV 例程300篇】04. 用 matplotlib 显示图像(plt.imshow)


函数 plt.imshow() 用于通过 matplotlib 库显示图像。

函数说明:

matplotlib.pyplot.imshow(img[, cmap])

OpenCV 使用 BGR 格式,matplotlib/PyQt 使用 RGB 格式。使用 matplotlib/PyQt 显示 openCV 图像,要将 BGR 格式转换为 RGB 格式:

# 图片格式转换:BGR(OpenCV) -> RGB(PyQt5)
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)

参数说明:

  • img:图像数据,nparray 多维数组,对于 openCV(BGR)格式图像要先进行格式转换
  • cmap:颜色图谱(colormap),默认为 RGB(A) 颜色空间
    • gray:灰度显示
    • hsv:hsv 颜色空间

注意事项:

  1. OpenCV 和 matplotlib 中的彩色图像都是 Numpy 多维数组。但 OpenCV 使用 BGR 格式,颜色分量按照蓝/绿/红的次序排列,而 matplotlib 使用 RGB 格式,颜色分量按照红/绿/蓝的次序排序。因此用 plt.imshow() 显示 OpenCV 彩色图像时,先要进行颜色空间转换,将Numpy 多维数组按照红/绿/蓝的次序排序。
  2. plt.imshow() 可以直接显示 OpenCV 灰度图像,不需要格式转换,但需要使用 cmap=‘gray’ 进行参数设置。
  3. plt.imshow() 可以使用 matplotlib 库中的各种方法绘图,如标题、坐标轴、插值等,详见 matploblib Document
  4. PyQt5 也使用 RGB 格式,因此在 PyQt5 中显示 OpenCV 彩色图像时,也要进行颜色空间转换。

基本例程:

    # 1.10 图像显示(plt.imshow)
    imgFile = "../images/imgLena.tif"  # 读取文件的路径
    img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)

    imgRGB = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)  # 图片格式转换:BGR(OpenCV) -> RGB(PyQt5)
    img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)  # 图片格式转换:BGR(OpenCV) -> Gray

    plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文标签
    plt.subplot(221), plt.title("1. RGB 格式(mpl)"), plt.axis('off')
    plt.imshow(imgRGB)  # matplotlib 显示彩色图像(RGB格式)
    plt.subplot(222), plt.title("2. BGR 格式(OpenCV)"), plt.axis('off')
    plt.imshow(img1)    # matplotlib 显示彩色图像(BGR格式)
    plt.subplot(223), plt.title("3. 设置 Gray 参数"), plt.axis('off')
    plt.imshow(img2, cmap='gray')  # matplotlib 显示灰度图像,设置 Gray 参数
    plt.subplot(224), plt.title("4. 未设置 Gray 参数"), plt.axis('off')
    plt.imshow(img2)  # matplotlib 显示灰度图像,未设置 Gray 参数
    plt.show()

程序说明:

图 1 中 OpenCV 的 BGR 彩色图像已转换为 RGB 格式,彩色图像的颜色显示正常;
图 2 中 OpenCV 的 BGR 彩色图像格式未做转换,彩色图像的颜色显示异常;
图 3 中 plt.imshow() 设置 cmap=‘gray’,灰度图像的颜色显示正常;
图 4 中 plt.imshow() 未设置 cmap=‘gray’,灰度图像的颜色显示异常。

在这里插入图片描述


(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18
更多内容请见:>『youcans 的 OpenCV 例程300篇 - 总目录』(https://blog.csdn.net/youcans/article/details/125112487)

OpenCV中,可以使用`cv2.flip()`函数来实现图像的翻转操作。该函数的参数`flipCode`用于控制翻转的方式,其中`flipCode>0`表示水平翻转,`flipCode=0`表示垂直翻转,`flipCode<0`表示水平和垂直翻转。以下是一个示例代码: ```python import cv2 import matplotlib.pyplot as plt img = cv2.imread("image.png") # 读取图像 imgFlip1 = cv2.flip(img, 0) # 垂直翻转 imgFlip2 = cv2.flip(img, 1) # 水平翻转 imgFlip3 = cv2.flip(img, -1) # 水平和垂直翻转 plt.figure(figsize=(9, 6)) plt.subplot(221), plt.axis('off'), plt.title("Original") plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 原始图像 plt.subplot(222), plt.axis('off'), plt.title("Flipped Horizontally") plt.imshow(cv2.cvtColor(imgFlip2, cv2.COLOR_BGR2RGB)) # 水平翻转 plt.subplot(223), plt.axis('off'), plt.title("Flipped Vertically") plt.imshow(cv2.cvtColor(imgFlip1, cv2.COLOR_BGR2RGB)) # 垂直翻转 plt.subplot(224), plt.axis('off'), plt.title("Flipped Horizontally & Vertically") plt.imshow(cv2.cvtColor(imgFlip3, cv2.COLOR_BGR2RGB)) # 水平垂直翻转 plt.show() ``` 在这个例子中,我们首先使用`cv2.imread()`函数读取图像,然后使用`cv2.flip()`函数分别进行垂直、水平和水平垂直翻转操作,最后使用Matplotlib库将图像显示出来。 希望这个例子可以帮助到您!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【OpenCV 例程200】29. 图像的翻转(cv2.flip)](https://blog.csdn.net/youcans/article/details/121333357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [OpenCV旋转图像的几种方法](https://blog.csdn.net/geji001/article/details/130645598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [opencv图像的旋转](https://blog.csdn.net/qq_43422995/article/details/122346080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youcans_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值