1. 程式人生 > >OpenCV中影象顯示、讀取與儲存

OpenCV中影象顯示、讀取與儲存

眾所周知,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要留心其通道順序。