最近调试程序的时候,发现显示不正常,纳闷了很久,来回测试,终于发现问题,希望大家别再入坑了。
在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。
这是因为:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式。
各自显示各自图像是正常的,分别显示是不正常的。
说起来很绕,还是根据程序结合结果来看。
原图:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('0001.jpg') # CV 读取图片
img2 = plt.imread('0001.jpg') # plt 读取图片
img3 = cv.cvtColor(img, cv.COLOR_BGR2RGB) # CV BGR转变RGB
plt.imshow(img)
plt.show()
plt.imshow(img2)
plt.show()
plt.imshow(img3)
plt.show()
cv.imshow('bgr image', img)
cv.imshow('rgb image', img2)
cv.imshow('plt image', img3)
cv.waitKey(0) # 必须加,不然无法显示
cv.destroyAllWindows()
程序运行结果如下:
Matplotlib显示结果:
CV读取BGR,显示:

Matplotlib读取RGB,显示:

CV读取BGR转换为RGB,显示:

OpenCV显示结果:
CV读取BGR,显示:

Matplotlib读取RGB,显示:

CV读取BGR转换为RGB,显示:

BGR与RGB颜色差异

本文探讨了使用plt.imshow和cv2.imshow显示同一张图片时出现的颜色差异问题。通过对比matplotlib.pyplot的RGB模式与opencv的BGR模式,揭示了不同读取方式下图像颜色显示的原理,并提供了解决方案。

被折叠的 条评论
为什么被折叠?



