如何在灰色图像上覆盖红色的热图 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,...]
希望以上内容是您要找的。
我尝试先将灰度图像和 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,...]
希望以上内容是您要找的。