一种将热图图像二值化的方法,将热像素(暗红色或橙色或黄色)变为白色,其余为黑色

问题描述 投票:0回答:0

我有一个从 gradcam 生成的热图

我只想将热区转换为遮罩,而不是冷区。当试图将其转换为二进制掩码时,即使移除蓝色通道后该区域也不正确。

将热图转换为二进制掩码的广为人知的方法有哪些?

用于二值化的代码

heatmap = cv2.imread('gradcam.jpg')

gray = cv2.cvtColor(heatmap, cv2.COLOR_BGR2GRAY)

_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)

#this is to separate the regions to have mask later
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)


contour_image = np.zeros_like(binary)
cv2.drawContours(contour_image, contours, -1, 255, cv2.FILLED)

#final mask 
masked = cv2.bitwise_and(heatmap, heatmap, mask=contour_image)

我想要这样的所有阅读和黄色/橙色区域

以上结果是使用

生成的
lower_red = np.array([0, 0, 50])
upper_red = np.array([120, 50, 255])
lower_yellow = np.array([0, 50, 50])
upper_yellow = np.array([120, 255, 255])


red_mask = cv2.inRange(heatmap, lower_red, upper_red)
yellow_mask = cv2.inRange(heatmap, lower_yellow, upper_yellow)
combined_mask = cv2.bitwise_or(red_mask, yellow_mask)

masked = cv2.bitwise_and(heatmap, heatmap, mask=combined_mask)
python opencv image-segmentation
© www.soinside.com 2019 - 2024. All rights reserved.