多语言展示
当前在线:122今日阅读:23今日分享:25

处理opencv里用plt显示imread读取图像偏色问题

使用opecv过程中经常需要使用plt输出图片作为前后对比,方便观察。但是会出现plt显示时,颜色偏差严重的情况。这是因为plt和imread二者颜色通道不同导致。
工具/原料
1

pycharm+win7环境

2

opencv3+ python3

方法/步骤
1

首先通过imread读入源图并显示。import cv2   as  cvimport numpy as npimport copyimport randomfrom matplotlib import pyplot as plt# cv.imread 读取图像格式为b,g,rimg = cv.imread('c:\\meiping1.png')cv.imshow('img',img)

2

然后 采用plt方法进行显示。把imread生成的img使用plt输出。plt.imshow(img)plt.show()结果发现出现严重偏色。

3

原因:cv.imread 读取图像格式为b,g,r但是 plt显示按照 rgb次序!因此要转换一下。

4

解决方法:b,g,r = cv.split(img)img_rgb = cv.merge([r,g,b])先分离 调整此序后,合并。

5

整体代码:import cv2   as  cvimport numpy as npimport copyimport randomfrom matplotlib import pyplot as plt# imread的第二个参数# 无 代表是原图,# 等于1代表是灰度图# 大于1彩色图# cv.imread 读取图像格式为b,g,rimg = cv.imread('c:\\meiping1.png')cv.imshow('img<1',img)#如果本身是彩图 似乎也没什么影响!img = cv.imread('c:\\meiping1.png', 1)cv.imshow('img=1',img)img = cv.imread('c:\\meiping1.png', 3)cv.imshow('img>1',img)plt.imshow(img)plt.show()b,g,r = cv.split(img)img_rgb = cv.merge([r,g,b])plt.figure()#plt显示按照 rgb次序!因此要转换plt.imshow(img_rgb)plt.show()cv.waitKey(0)附图为转化后 plt显示效果

注意事项
1

plt显示按照 rgb次序 imread BGR次序

2

本文实现在 pycharm+win7+opencv3+ python3

推荐信息