歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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()讀取的圖像的結果,下右圖為色彩空間對調後的結果

這兩個問題,希望大家注意。

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的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved