[英]How does one convert a grayscale image to RGB in OpenCV (Python)?
[英]How to convert a grayscale image to heatmap image with Python OpenCV
我有一個(540, 960, 1)
形狀的圖像,其值范圍為[0..255]
,即黑白。 我需要將其轉換為“熱圖”表示。 例如, 255
像素的熱量最高, 0
像素的熱量最低。 其他介於兩者之間。 我還需要將熱圖作為 Numpy 數組返回,以便稍后將它們合並到視頻中。 有沒有辦法實現這一目標?
這里有兩種方法,一種使用 Matplotlib,一種僅使用 OpenCV
方法#1: OpenCV
+ matplotlib.pyplot.get_cmap
為了實現灰度(1 通道) ->
熱圖(3 通道)轉換,我們首先將圖像作為灰度加載。 默認情況下,OpenCV 以 3 通道、8 位 BGR 的形式讀取圖像。 我們可以使用帶有cv2.IMREAD_GRAYSCALE
參數的cv2.imread()
直接將圖像加載為灰度圖像,或者使用cv2.cvtColor()
將 BGR 圖像轉換為帶有cv2.COLOR_BGR2GRAY
參數的灰度圖像。 加載圖像后,我們將這個灰度圖像放入 Matplotlib 以獲得我們的熱圖圖像。 Matplotlib 返回 RGB 格式,因此我們必須轉換回 Numpy 格式並切換到 BGR 色彩空間以與 OpenCV 一起使用。 這是一個使用科學紅外攝像機圖像作為inferno
顏色圖輸入的示例。 請參閱在 Matplotlib 中選擇顏色圖以了解可用的內置顏色圖,具體取決於您所需的用例。
輸入圖像:
輸出熱圖圖像:
代碼
import matplotlib.pyplot as plt
import numpy as np
import cv2
image = cv2.imread('frame.png', 0)
colormap = plt.get_cmap('inferno')
heatmap = (colormap(image) * 2**16).astype(np.uint16)[:,:,:3]
heatmap = cv2.cvtColor(heatmap, cv2.COLOR_RGB2BGR)
cv2.imshow('image', image)
cv2.imshow('heatmap', heatmap)
cv2.waitKey()
方法#2: cv2.applyColorMap()
我們可以使用 OpenCV 的內置熱圖函數。 這是使用cv2.COLORMAP_HOT
熱圖的結果
代碼
import cv2
image = cv2.imread('frame.png', 0)
heatmap = cv2.applyColorMap(image, cv2.COLORMAP_HOT)
cv2.imshow('heatmap', heatmap)
cv2.waitKey()
注意:雖然 OpenCV 的內置實現簡短快捷,但我建議使用方法 #1,因為有更大的顏色圖選擇。 Matplotlib 有數百種不同的顏色圖,並允許您創建自己的自定義顏色圖,而 OpenCV 只有 12 個可供選擇。 這是內置的 OpenCV 顏色圖選擇:
您需要將圖像轉換為適當的灰度表示。 這可以通過幾種方式完成,特別是使用imread(filename, cv2.IMREAD_GRAYSCALE)
。 這將圖像的形狀減少到(54,960)
(提示,沒有三維)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.