首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将CV2颜色映射的某个阈值以下的值设置为透明

将CV2颜色映射的某个阈值以下的值设置为透明
EN

Stack Overflow用户
提问于 2020-06-24 15:37:48
回答 1查看 2.1K关注 0票数 1

我目前正在尝试将激活热图应用到照片中。

目前,我有原来的照片,以及一个概率的面具。我将概率乘以255,然后舍入最接近的整数。然后,我使用cv2.applycoleMap和COLORMAP.JET将颜色映射应用于不透明度为25%的图像。

代码语言:javascript
运行
复制
img_cv2 = cv2.cvtColor(np_img, cv2.COLOR_RGB2BGR)

heatmapshow = np.uint8(np.floor(mask * 255))

colormap = cv2.COLORMAP_JET

heatmapshow = cv2.applyColorMap(np.uint8(heatmapshow - 255), colormap)

heatmap_opacity = 0.25
image_opacity = 1.0 - heatmap_opacity

heatmap_arr = cv2.addWeighted(heatmapshow, heatmap_opacity, img_cv2, image_opacity, 0)

此当前代码成功生成热图。不过,我想做两个改变。

  1. 将超过某个阈值的所有值的不透明度保持在25% (可能> 0,但我更倾向于灵活性),但是当掩膜低于该阈值时,将这些细胞的不透明度降低到0%。换句话说,如果激活非常少,我希望保留原始图像的颜色。

如果可能的话,

  1. 也希望能够指定一个自定义颜色图,因为本地颜色地图是相当有限的,但是如果我可以做自定义不透明的事情,我可能可以不使用它。

我在Stackoverflow上读到,您可能会欺骗cv2,使其不使用NaN值覆盖任何颜色,还可以读取只适用于浮点数而不适用于int8的颜色,这会使事情复杂化,因为我使用的是int8。我还担心这个功能将来可能会改变,因为我不认为这是有意在cv2中内置的设计。

有没有人有很好的方法来实现这些目标?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-24 17:24:30

关于你的第二个问题:

下面是如何在Python/OpenCV中创建一个简单的自定义两色梯度彩色地图。

输入:

代码语言:javascript
运行
复制
import cv2
import numpy as np

# load image as grayscale
img = cv2.imread('lena_gray.png', cv2.IMREAD_GRAYSCALE)

# convert to 3 equal channels
img = cv2.merge((img, img, img))

# create 1 pixel red image
red = np.full((1, 1, 3), (0,0,255), np.uint8)

# create 1 pixel blue image
blue = np.full((1, 1, 3), (255,0,0), np.uint8)

# append the two images
lut = np.concatenate((red, blue), axis=0)

# resize lut to 256 values
lut = cv2.resize(lut, (1,256), interpolation=cv2.INTER_LINEAR)

# apply lut
result = cv2.LUT(img, lut)

# save result
cv2.imwrite('lena_red_blue_lut_mapped.png', result)

# display result
cv2.imshow('RESULT', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

应用于图像的彩色地图结果:

关于你的第一个问题:

您正在使用常量“不透明度”值将热图图像与原始图像混合。可以用图像替换单个不透明值。您只需手动执行addWeighted * opacity_img +原始*( 1 -不透明度_img),其中您的不透明度图像浮动在0到1之间,然后剪辑并转换回uint8。如果您的不透明度图像是二进制的,那么可以使用cv2.bitWiseAnd()代替乘。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62558807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档