Python中彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotib 是 RGB 模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotib 正确显示。
opencv:
import cv2 import matplotlib.pyplot as plt
import numpy as np img1 = cv2.imread('1.jpg') # img1为BGR cv2.imshow('image', img1) # 图1
img2 = plt.imread('1.jpg') # img2为RGB
plt.imshow(img2) # 图2
img_new = np.zeros(img1.shape)
img_new[:,:,0] = img1[:,:,2]
img_new[:,:,1] = img1[:,:,1]
img_new[:,:,2] = img1[:,:,0] # 将img1转为RGB模式img_new
img_new = img_new.astype(np.uint8) # 将默认的flost64改为uint8
plt.imshow(img_new) # 此时img_new和img2一样,和图2结果一样
plt.imshow(img1) # 利用plt显示opencv读取的图片,则不会正确显示。如图3
图1 图2 图3
img = cv2.imread('1.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #利用opencv将BGR图转为灰度图
cv2.imshow('Gray_image', img_gray) #图1
plt.imshow(img_gray) #图2,直接查看失败
plt.imshow(img_gray,cmap='gray') # 图3,加入参数查看灰度成功
import cv2 import numpy as np img1 = cv2.imread('1.jpg', 0) #以灰度模式读入 img1 = cv2.imread('1.jpg', cv2.IMREAD_GRAYSCALE) #同上,这应该与上文先读入后转灰度是一致的
img1 = cv2.imread('1.jpg', 1) #以彩图模式读入
img1 = cv2.imread('1.jpg', cv2.IMREAD_COLO) # 同上,读入一副彩色图像。图像的透明度会被忽略,这是默认参数。