如何在灰色图像上覆盖红色的热图 numpy 数组?

How to overlay a heatmap numpy array in red on a gray image?

我尝试先将灰度图像和 2D 热图转换为 RGB 图像。通过使除红色维度以外的所有维度都为零来转换热图。

然后用阈值遮盖图像,其中热图高于 0.01,并在图像组合的地方创建新图像。

但由于某种原因,这会在图像的某些部分产生绿色:

要覆盖热图,您可以使用 cv2.addWeighted()

第一部分

基于相似的输入图像

示例输入图像:

cv2.imshow('Input image', g1)

g1 是 BGR 图像:

g1.shape
(158, 99, 3)

示例掩码:

cv2.imshow('Mask image', gm)

gm是二值图像:

gm.shape
(158, 99)

热图:

OpenCV 允许您使用 cv2.applyColorMap() 在二进制图像 gm 上创建热图。在此示例中,我选择了选项 cv2.COLORMAP_JET.

heatmap_img = cv2.applyColorMap(gm, cv2.COLORMAP_JET)

使用 cv2.addWeighted():

在原始图像 g1 上叠加热图
overlay_img = cv2.addWeighted(heatmap_img, 0.5, g1, 0.5, 0)

第二部分

上面的图片不是你要找的。根据您的问题,您希望 覆盖感兴趣的区域,即白色区域。

首先,select仅使用遮罩的叠加图像中的 ROI gm

roi_img = cv2.bitwise_and(overlay_img, overlay_img, mask = gm)

最后,保留mask为白色的ROI (255);在掩码为黑色 (0) 的所有其他位置放置原始图像的像素强度 g1:

roi_img[gm[:] == 0,...] = g1[gm[:] == 0,...]

希望以上内容是您要找的。