簡體   English   中英

為什么 BGR 圖像顯示為灰度?

[英]Why is a BGR image displayed as grayscale?

語境

我正在使用帶有 OpenCV 的 Google Colab 來處理.jpg圖像。 Colab 的 OpenCV 的imshow函數有問題,因此使用matplotlib打印圖像。 我知道 OpenCV 使用 BGR 並使用matplotlib正確顯示內容,我需要使用cv2cvtColor()函數。

問題

加載圖像並顯示時,它顯示為灰度,即使默認情況下它應該是 BGR。 同樣,轉換成灰度顯示圖像后,顯示為BGR。

由於圖像存儲為numpy數組,我嘗試找到這些數組的維度。 應該是 BGR(顯示為灰度)的圖像正如預期的那樣是一個 3 維數組。 同樣,轉換成灰度后的圖像,正如預期的那樣是一個二維數組,但它仍然顯示為BGR。

BGR 圖像顯示為灰度:

BGR 圖像顯示為灰度

灰度圖像顯示為 BGR:

灰度圖像顯示為 BGR

從我的角度來看,原始圖像img在第一張圖片中顯示為灰度的假設是錯誤的,因為:

  • 您已經發現, img具有三個顏色通道。
  • 不太可能,Matplotlib 自動將輸入圖像轉換為灰度。
  • 看起來,圖像左側有輕微的紅色“微光”。 旁注:由於 OpenCV 和 Matplotlib 的顏色排序不同,我懷疑這個“微光”實際上是藍色的,在此類照片中更可能出現這種情況。

因此,對於第一張圖片:您的視覺感知只是被圖像本身所欺騙。 :-)

實際的灰度轉換圖像(您的第二張圖片)與 Matplotlib 的標准顏色圖一起顯示。 正如馬克和其他人正確指出的那樣,您應該按如下方式更改代碼以獲得實際的“灰度圖像”:

plt.imshow(img, cmap='gray')

希望有幫助!

如果您希望以灰度轉換和顯示彩色圖像:

import matplotlib as plt

# Reading color image as grayscale
img = cv2.imread(path, 0)

plt.imshow(img, cmap='gray')
plt.show()

其中路徑是文件位置。

另一種方法是自己轉換。 您應該使用的過濾器如下:

def rgb2gray(rgb):
    return np.dot(rgb[...,:3], [0.3, 0.59, 0.11]) # colorspace order [R, G, B]

grey_img = rgb2gray(img)

其中 R 為紅色,G 為綠色,B 為藍色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM