今天在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()讀取的圖像的結果,下右圖為色彩空間對調後的結果
這兩個問題,希望大家注意。
OpenCV官方教程中文版(For Python) PDF http://www.linuxidc.com/Linux/2015-08/121400.htm
Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm
Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm
CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm
Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm
Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm
基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm
[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9 http://www.linuxidc.com/Linux/2014-12/110045.htm
OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡