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) # 同上,讀入一副彩色圖像。圖像的透明度會被忽略,這是默認參數。
