簡體   English   中英

如何使用 Python OpenCV 將灰度圖像轉換為熱圖圖像

[英]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.

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