首頁 > 軟體

解決plt.imshow顯示cv2.imread讀取的影象有色差發藍的四種方法問題

2022-04-19 13:01:22

原圖

一、出現色差程式碼

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,導致影象出現色差發藍。

2.2 灰度影象出現色差原因

那麼為什麼plt.imshow()顯示灰度圖(只有一個通道)還會出現色差呢?
上一段講過,這是因為plt.imshow()函數預設顯示三通道影象,把灰度圖當作彩色圖顯示出來了,所以出現了發藍的現象。

三、解決

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讀取的影象有色差發藍的四種方法問題的文章就介紹到這了,更多相關plt.imshow顯示cv2.imread讀取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com