最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV里的imshow()和Matplotlib.pyplot的imshow()的實現(xiàn)

 更新時間:2019年11月25日 14:59:40   作者:arnoldwang_  
這篇文章主要介紹了OpenCV里的imshow()和Matplotlib.pyplot的imshow()的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、問題

在Python里使用OpenCV時,一般是通過cv2.imread讀入圖片,然后用plt.imshow顯示圖片,但最近學(xué)習(xí)OpenCV時這樣做的結(jié)果與預(yù)期的結(jié)果有較大的出入。查找資料后,才明白OpenCV里的imshow()和Matplotlib.pyplot的imshow()在使用上有一些區(qū)別,不注意的話很容易就會導(dǎo)致很奇怪的結(jié)果。

下面的示例代碼及運行結(jié)果顯示了這種差異:

import cv2
import matplotlib.pyplot as plt

#以灰度模式讀入圖片
messi=cv2.imread('messi.jpg',0)

#使用matplotlib.pyplot的imshow顯示圖片
plt.imshow(messi),plt.title('messi_plt')
plt.xticks([]),plt.yticks([]) #隱藏坐標(biāo)軸
plt.show()

#使用opencv的imshow顯示圖片
cv2.imshow('messi_cv',messi)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結(jié)果如下:

在這里插入圖片描述

左邊是原圖,中間是cv2.imshow的顯示結(jié)果,右邊是plt.imshow的顯示結(jié)果。很明顯地看到,明明是讀入灰度圖,plt.imshow的結(jié)果卻更像是張彩圖,這顯然是有問題的。

二、分析和解決辦法

為了比較和分析OpenCV里imshow()和Matplotlib.pyplot里imshow()這兩者的差異,下面分別對顯示彩圖以及顯示灰度圖這兩種情況來進(jìn)行說明。

彩色圖

對于彩色圖片,一般由R,G,B三個通道構(gòu)成。然而,需要注意的是,OpenCV里彩色圖片加載時是按照BGR的順序,Matplotlib里彩色圖片加載時是按照RGB的順序。所以,當(dāng)我們用cv2.imread讀入圖片,用cv2.imshow來顯示時自然是不會出問題的,但若用plt.imshow來顯示就會出現(xiàn)問題,如下面的結(jié)果所示。
這里省略示例代碼(和上面的幾乎相同,只是不要在cv2.imread里設(shè)置“0”這個參數(shù)即可),運行結(jié)果如下:

在這里插入圖片描述

左邊是原圖,中間是cv2.imshow的顯示結(jié)果,右邊是plt.imshow的顯示結(jié)果。顯然,plt.imshow的結(jié)果出現(xiàn)了問題。
為了解決這個問題,方法很簡單,就是將通道R和通道B的內(nèi)容調(diào)換一下,再用plt.imshow顯示時就正常了。下面給出該方法的示例代碼:

import cv2
import matplotlib.pyplot as plt

#讀入彩色圖片
messi=cv2.imread('messi.jpg',1)

#使用matplotlib.pyplot的imshow顯示圖片
plt.imshow(messi),plt.title('messi_plt')
plt.xticks([]),plt.yticks([]) #隱藏坐標(biāo)軸
plt.show()

##調(diào)換r、b通道,生成rgb順序的圖片并顯示
b,g,r=cv2.split(messi) #通道的拆分
messi_rgb=cv2.merge((r,g,b)) #通道的融合
plt.imshow(messi_rgb),plt.title('messi_rgb_plt')
plt.xticks([]),plt.yticks([])
plt.show()

#使用opencv的imshow顯示圖片
cv2.imshow('messi_cv',messi)
cv2.waitKey(0)
cv2.destroyAllWindows()

灰度圖

灰度圖是單通道圖片,按理說不會出現(xiàn)上面彩色圖的那種問題,不管是用cv2.imshow顯示還是用plt.imshow顯示,結(jié)果都應(yīng)該是一樣的。然而,事實卻并非如此(如最開始的示例所示)。我糾結(jié)了好久不知道原因是什么,一開始以為是opencv和matplotlib的版本不匹配,結(jié)果更新版本之后還是有這個問題。后來,去找來matplotlib的API文檔才明白是咋回事。
matplotlib.pyplot.imshow函數(shù)里,有一個參數(shù)是cmap,API文檔里給出的說明是:

cmap : str or Colormap, optional
The Colormap instance or registered colormap name used to map scalar data to colors. This parameter is ignored for RGB(A) data. Defaults to rcParams[“image.cmap”] = ‘viridis'.

大致的意思是說,cmap給出了標(biāo)量值如何映射到顏色空間,并且對于RGB(A)圖像此參數(shù)是忽略的;默認(rèn)參數(shù)可查看rcParams[“image.cmap”]。鏈接轉(zhuǎn)過去的文檔是matplotlib的示例配置文檔matplotlibrc,里面定義了各種變量的默認(rèn)值(這也是為什么我們在調(diào)用matplotlib里的函數(shù)時,有些參數(shù)我們沒給值也能正常運行的原因)。在這里能看到,cmap的默認(rèn)值是viridis,這也就說明了在使用plt.imshow顯示灰度圖時出現(xiàn)問題的原因。

因此,為了解決該問題,使plt.imshow能正常地顯示灰度圖,方法也很簡單,就是修改cmap的值為'gray'。示例代碼如下:

import cv2
import matplotlib.pyplot as plt

#讀入彩色圖片
messi=cv2.imread('messi.jpg',0)

#使用opencv的imshow顯示圖片
cv2.imshow('messi_cv',messi)
cv2.waitKey(0)
cv2.destroyAllWindows()

#使用matplotlib.pyplot的imshow顯示圖片
#cmap使用默認(rèn)值
plt.imshow(messi),plt.title('messi_camp_default')
plt.xticks([]),plt.yticks([]) #隱藏坐標(biāo)軸
plt.show()

#使用matplotlib.pyplot的imshow顯示圖片
#cmap設(shè)置為'gray'
plt.imshow(messi,cmap='gray'),plt.title('messi_camp_gray')
plt.xticks([]),plt.yticks([]) #隱藏坐標(biāo)軸
plt.show()

運行結(jié)果為:

在這里插入圖片描述

左邊是cv2.imshow的顯示結(jié)果,中間和右邊的是plt.imshow的顯示結(jié)果。

另外,cmap的值除了可以取默認(rèn)參數(shù)及'gray'外,還有很多值可供我們選擇,詳細(xì)的說明在這里。其實這些東西了解下就行,等實際使用時,查閱下、試一試。根據(jù)需要選擇合適的就可以了。

注:
1.關(guān)于matplotlib里的imshow函數(shù)更詳細(xì)的說明在這里。
2.關(guān)于matplotlib.matplotlibrc文檔更詳細(xì)的說明在這里。
3.如果想查看或編輯自己電腦里的matplotlibrc文件,可使用此命令matplotlib.matplotlib_fname()獲取路徑。

三、總結(jié)

由于OpenCV里的imshow和Matplotlib里的imshow的一些差異,在使用時主要是要注意兩點:
1.顯示彩色圖時,要把b、r通道調(diào)換一下。
2.顯示灰度圖時,記得設(shè)置cmap的值為'gray'。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python Selenium自動化獲取頁面信息的方法

    Python Selenium自動化獲取頁面信息的方法

    這篇文章主要介紹了Python Selenium自動化獲取頁面信息的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • pycharm必知的一些簡單設(shè)置方法

    pycharm必知的一些簡單設(shè)置方法

    這篇文章主要介紹了pycharm必知的一些簡單設(shè)置方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python djanjo之csrf防跨站攻擊實驗過程

    Python djanjo之csrf防跨站攻擊實驗過程

    csrf攻擊,即cross site request forgery跨站(域名)請求偽造,這里的forgery就是偽造的意思。這篇文章主要給大家介紹了關(guān)于Python djanjo之csrf防跨站攻擊的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • Python3中urllib庫添加請求頭的兩種方式

    Python3中urllib庫添加請求頭的兩種方式

    Python?3中的urllib模塊可以用來處理URL,包括下載和上傳文件、創(chuàng)建和讀取cookie、訪問Web?API等,本文給大家介紹Python3中urllib庫添加請求頭的兩種方式,感興趣的朋友一起看看吧
    2023-10-10
  • Python HTMLTestRunner庫安裝過程解析

    Python HTMLTestRunner庫安裝過程解析

    這篇文章主要介紹了Python HTMLTestRunner庫安裝過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • linux mint中搜狗輸入法導(dǎo)致pycharm卡死的問題

    linux mint中搜狗輸入法導(dǎo)致pycharm卡死的問題

    這篇文章主要介紹了linux mint中搜狗輸入法導(dǎo)致pycharm卡死的問題,這篇文章給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 在Python中預(yù)先初始化列表內(nèi)容和長度的實現(xiàn)

    在Python中預(yù)先初始化列表內(nèi)容和長度的實現(xiàn)

    今天小編就為大家分享一篇在Python中預(yù)先初始化列表內(nèi)容和長度的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • TensorFlow2.4完成Word2vec詞嵌入訓(xùn)練方法詳解

    TensorFlow2.4完成Word2vec詞嵌入訓(xùn)練方法詳解

    這篇文章主要為大家介紹了TensorFlow2.4完成Word2vec詞嵌入訓(xùn)練方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • appium中常見的幾種點擊方式

    appium中常見的幾種點擊方式

    本文主要介紹了appium中常見的幾種點擊方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 區(qū)分python中的進(jìn)程與線程

    區(qū)分python中的進(jìn)程與線程

    這篇文章主要介紹了區(qū)分python中的進(jìn)程與線程,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08

最新評論

全州县| 嘉鱼县| 德格县| 德惠市| 同德县| 长春市| 邯郸县| 庄浪县| 东丽区| 泽普县| 兴宁市| 宣汉县| 揭阳市| 驻马店市| 普格县| 翁源县| 聂荣县| 龙川县| 宁都县| 鄂尔多斯市| 镇雄县| 察隅县| 虎林市| 融水| 昭觉县| 海伦市| 额敏县| 阆中市| 宽城| 青铜峡市| 夹江县| 泉州市| 娱乐| 莲花县| 景东| 孟州市| 新泰市| 昌黎县| 海城市| 汉寿县| 高台县|