Python中cv2庫和matplotlib庫色彩空間排布不一致


今天在python中讀如圖片時發現以下問題:

1.在from matplotlib import pyplot as plt之后,再import cv2

cv2.imshow()不能正常使用,還不知道是什么原因

目前我的解決辦法是,使用cv2讀入圖像,然后調用plt.imshow()顯示圖像,不使用cv2.imshow()顯示圖像

2.OpenCV的cv2庫中的色彩空間和matplotlib庫中的色彩空間的排布方式是不一樣的

cv2中的色彩排列是(b,g,r),而matplotlib庫中的排列方式是(r,g,b)

由於第一個問題的存在,我只能寫了兩個程序來證明兩個庫的色彩排列方式不一樣

源圖為(圖片來源於網絡):

使用opencv讀取並使用cv2.imshow顯示

import numpy as np
import cv2

img = cv2.imread('/home/zh/pic/1.jpg')
while(True):
    cv2.imshow('cv2.imshow', img)
    k = cv2.waitKey(0) & 0xFF
    if k == 27:
        cv2.destroyAllWindows()
        break

結果顯示正確,如示:

但如果使用matplotlib中的pyplot.imshow(),顏色則反過來了,即r空間和b空間的色彩對調了,如下示:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img_bgr = cv2.imread('/home/zh/pic/1.jpg')
img_rgb = np.zeros(img_bgr.shape, img_bgr.dtype)
img_rgb[:,:,0] = img_bgr[:,:,2]
img_rgb[:,:,1] = img_bgr[:,:,1]
img_rgb[:,:,2] = img_bgr[:,:,0]

plt.subplot(121),plt.imshow(img_bgr)
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(img_rgb)
plt.xticks([]),plt.yticks([])
plt.show()

直接將cv2.imread()讀取的圖像放入plt.imshow()中,色彩不正確,但如果將cv2.imread()讀取的圖像的r通道和b通道的值對換一下,就正確了,下左圖為plt.imshow()直接顯示cv2.imread()讀取的圖像的結果,下右圖為色彩空間對調后的結果

這兩個問題,希望網友們注意


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM