OpenCV中影象顯示、讀取與儲存
阿新 • • 發佈:2018-12-10
眾所周知,opencv中的cv2.imread函式返回的影象資料,通道是BGR,而不是一般意義上的RGB;但是,這時如果用cv2.imshow進行顯示,看到的卻是正常的樣子;而如果用其他庫的顯示函式,如matplotlib的plt.imshow來顯示,則是異常的顯示,一般都是圖片發藍。如果把該影象資料用cv2.imwrite再儲存一下,再用其他庫的影象開啟,plt.imread,然後再顯示,結果又是正常的。總之可能cv2.imread\cv2.imshow\cv2.imwrite三者應該是配套的,雖然read的結果是比較特殊,但show出來的是把特殊的處理了,反而是正常顯示;write同理,把異常處理了,能夠按正常RGB順序儲存。
下面是一段程式碼:
import cv2 import matplotlib.pyplot as plt import os from PIL import Image folder = "test" image_list = os.listdir(folder) for index, item in enumerate(image_list): image_path = os.path.join(folder, item) image = cv2.imread(image_path) plt.subplot(121) plt.imshow(image) cv2.imwrite("test.jpg", image) # cv2.imshow("test", image) # plt.imshow(image) # test = Image.open("test.jpg") test = plt.imread("test.jpg") plt.subplot(122) plt.imshow(test) plt.show()
這段程式碼的主要功能就是驗證以上所說,可以看出,圖片先用cv2.imread讀取,然後用plt.imshow來顯示;將該圖片資料儲存之後,再用plt.imread讀取,然後顯示。
顯示的結果如下:
可以看出兩幅圖的不一致。
總之,對cv2.imread要留心其通道順序。