解決plt.imshow顯示cv2.imread讀取的圖像有色差發(fā)藍的四種方法問題
原圖
一、出現色差代碼
1.1 顯示彩色圖像出現色差
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('dog.jpg') plt.xticks([]), plt.yticks([]) #隱藏x軸和y軸 plt.imshow(img)
運行結果:
1.2 顯示灰度圖像出現色差
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) plt.xticks([]), plt.yticks([]) # 隱藏x和y軸 plt.imshow(img_gray)
運行結果:
二、解釋原因
2.1 彩色圖像出現色差原因
使用cv2.imread()讀取圖像時,默認彩色圖像的三通道順序為B、G、R,這與我們所熟知的RGB中的R通道和B通道正好互換位置了。
而使用plt.imshow()函數卻默認顯示圖像的通道順序為R、G、B,導致圖像出現色差發(fā)藍。
2.2 灰度圖像出現色差原因
那么為什么plt.imshow()顯示灰度圖(只有一個通道)還會出現色差呢?
上一段講過,這是因為plt.imshow()函數默認顯示三通道圖像,把灰度圖當作彩色圖顯示出來了,所以出現了發(fā)藍的現象。
三、解決
3.1 解決彩色圖像出現色差問題
3.1.1 方法1
img = cv2.imread('dog.jpg') #讀取通道順序為B、G、R b,g,r = cv2.split(img) #分別提取B、G、R通道 img_new1 = cv2.merge([r,g,b]) #重新組合為R、G、B plt.xticks([]), plt.yticks([]) # 隱藏x和y軸 plt.imshow(img_new1)
運行結果:
3.1.2 方法2
img = cv2.imread('dog.jpg') #讀取通道順序為B、G、R #img[:,:,0]表示圖片的藍色通道,對一個字符串s進行翻轉用的是s[::-1],同樣img[:,:,::-1]就表示BGR通道翻轉,變成RGB img_new2 = img[:, :, ::-1] plt.xticks([]), plt.yticks([]) # 隱藏x和y軸 plt.imshow(img_new2)
運行結果:
3.2 解決灰度圖像出現色差問題
3.2.1 方法1
img = cv2.imread('dog.jpg') img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #轉換為灰度圖 plt.xticks([]), plt.yticks([]) # 隱藏x和y軸 plt.imshow(img_gray,cmap='gray')
運行結果:
3.2.2 方法2
#cv2.imread()第二參數為0,直接將彩色圖像轉換為灰度圖像 img = cv2.imread('dog.jpg',0) plt.xticks([]), plt.yticks([]) # 隱藏x和y軸 plt.imshow(img_gray,cmap='gray')
運行結果:
到此這篇關于解決plt.imshow顯示cv2.imread讀取的圖像有色差發(fā)藍的四種方法問題的文章就介紹到這了,更多相關plt.imshow顯示cv2.imread讀取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python 網絡編程之UDP發(fā)送接收數據功能示例【基于socket套接字】
這篇文章主要介紹了Python 網絡編程之UDP發(fā)送接收數據功能,結合實例形式分析了Python使用socket套接字實現基于UDP協(xié)議的數據發(fā)送端與接收端相關操作技巧,需要的朋友可以參考下2019-10-10python append、extend與insert的區(qū)別
這篇文章主要介紹了python append、extend與insert的區(qū)別的相關資料,初學者對這幾個概念經常搞混,這里就幫大家理清楚,需要的朋友可以參考下2016-10-10在windows系統(tǒng)中實現python3安裝lxml
本文主要給大家簡單介紹了下在windows以及l(fā)inux系統(tǒng)中使用Python安裝LXML模塊的教程,非常簡單實用,有需要的小伙伴可以參考下2016-03-03