我有一个从 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)