为什么matplotlib显示opencv图像不正常
来源:互联网 发布:wirelessmon mac版 编辑:程序博客网 时间:2024/05/16 05:20
在前面的《数字图像的加载、显示和输出》中提到,opencv对多个图片输出在同一个窗口并没有直接的支持手段,但有时候我们会有这个需求,这时可以用matplotlib搭配使用。
下面将4张图片放在一个窗口中显示。原始图像如下:
使用matplotlib将4幅图像显示在一个窗口的代码如下:
# coding=utf-8import cv2import matplotlib.pyplot as pltscooter_path = "scooter.png" # 带alpha通道的彩色图像lenna_path = "lenna.bmp" # 3通道彩色图像baboon_path = "baboon.bmp" # 3通道彩色图像moon_path = "moon.bmp" # 灰度图像pic = [scooter_path, lenna_path, baboon_path, moon_path]plt.figure(figsize=(8, 6))for i in range(4): img = cv2.imread(pic[i]) plt.subplot(2, 2, i + 1) plt.imshow(img) plt.title(pic[i])plt.show()
显示如下:
可以看出,图像的颜色显示不正常。
这是因为matplotlib使用的颜色模式是我们现在流行的RGB模式,而opencv使用的是BGR模式,即RGB的倒序模式,与我们通常的RGB是反向的。因此在使用matplotlib显示之前需要做一下图像颜色的转换。
注意下面代码中如下这一行:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
import cv2import matplotlib.pyplot as pltscooter_path = "scooter.png" # 带alpha通道的彩色图像lenna_path = "lenna.bmp" # 3通道彩色图像baboon_path = "baboon.bmp" # 3通道彩色图像moon_path = "moon.bmp" # 灰度图像pic = [scooter_path, lenna_path, baboon_path, moon_path]plt.figure(figsize=(8, 6))for i in range(4): img = cv2.imread(pic[i]) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 注意这行。 plt.subplot(2, 2, i + 1) plt.imshow(img) plt.title(pic[i])plt.show()
再次输出,这次正常了:
那么问题来了,为什么opencv要采用BGR顺序的模式呢?这又是因为历史原因,早期的opencv开发者采用了BGR顺序,所以一直遗留下来了。那么早期的opencv开发者为什么要用BGR呢,因为那时的许多照相机生产厂家和软件开发商就是采用的BGR模式。
阅读全文
0 0
- 为什么matplotlib显示opencv图像不正常
- python opencv 使用 Matplotlib显示图像
- Python matplotlib绘图时汉字显示不正常
- 为什么img标签高度显示不正常?
- 为什么opencv显示图像为灰色,或者访问不到图像——图像的路径问题
- Pyqt5+matplotlib+opencv实现图像直方图操作
- Opencv显示图像
- opencv显示图像
- OpenCv图像载入显示
- openCV 对话框 显示图像
- opencv显示图像(3)
- OPENCV 中的显示图像
- opencv 图像显示IplImage
- QT OpenCv 图像显示
- opencv显示图像问题
- OPENCV--显示图像
- OpenCV+MFC显示图像
- opencv之显示图像
- 349. Intersection of Two Arrays
- 【牛客】 操作系统 处理机的所有指令可以在()中执行。
- Java的三大框架
- Linux下解压命令大全
- HashMap全面分析及JDK8对HashMap的相关优化
- 为什么matplotlib显示opencv图像不正常
- 文件系统的挂载(NIS NFS Automounter)
- MySQL常用命令
- ACdream-1171 Matrix sum, 最大费用最大流
- SLF4J用户手册
- poj 1065 Wooden Sticks (求最长非降子序列的个数)
- python中的and和or
- fieldset边框样式无效解决方案
- 趣图 | 程序员给小朋友扎辫子