今天在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()讀取的圖像的結果,下右圖為色彩空間對調后的結果
這兩個問題,希望網友們注意