使用opecv过程中经常需要使用plt输出图片作为前后对比,方便观察。但是会出现plt显示时,颜色偏差严重的情况。这是因为plt和imread二者颜色通道不同导致。
方法/步骤
-
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 cv
import numpy as np
import copy
import random
from matplotlib import pyplot as plt
# imread的第二个参数
# 无 代表是原图,
# 等于1代表是灰度图
# 大于1彩色图
# cv.imread 读取图像格式为b,g,r
img = 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显示效果
END
文章评论