Python中如何实现两张灰度图像叠加:单张转绿色后与另一张融合
实现方案
基于你已经导入的OpenCV库即可实现需求,核心逻辑是先把单张灰度图映射为指定颜色的彩色图,再对两张3通道图做加权融合,完整实现代码如下:
import cv2 import numpy as np # (可选优化)读入时直接指定灰度模式,避免默认读为3通道灰度图的冗余问题,替换你原有读入代码即可 # img_avg = cv2.imread(directory + "/xzIMatrixaveraged/1.png", cv2.IMREAD_GRAYSCALE) # img_dyn = cv2.imread(directory + "/xzIMatrixdynamic/1.png", cv2.IMREAD_GRAYSCALE) # 统一转单通道灰度图,兼容你原有读入逻辑 gray_avg = cv2.cvtColor(img_avg, cv2.COLOR_BGR2GRAY) if len(img_avg.shape) == 3 else img_avg gray_dyn = cv2.cvtColor(img_dyn, cv2.COLOR_BGR2GRAY) if len(img_dyn.shape) == 3 else img_dyn # 生成绿色色阶图:OpenCV默认BGR通道顺序,索引0为蓝、1为绿、2为红 green_dyn = np.zeros((gray_dyn.shape[0], gray_dyn.shape[1], 3), dtype=np.uint8) green_dyn[..., 1] = gray_dyn # 仅绿色通道赋值灰度值,蓝、红通道置0 # 把另一张灰度图转成3通道格式,满足融合的维度要求 bgr_avg = cv2.cvtColor(gray_avg, cv2.COLOR_GRAY2BGR) # 加权融合:alpha是avg图权重,1-alpha是绿色图权重,最后一位为亮度偏移量默认设0 alpha = 0.5 # 可自行调整数值修改融合比例,数值越大avg图占比越高 merged_img = cv2.addWeighted(bgr_avg, alpha, green_dyn, 1 - alpha, 0) # 可选操作:展示/保存结果 cv2.imshow("融合结果", merged_img) cv2.waitKey(0) cv2.imwrite("merged_result.png", merged_img)
- 如需更换其他色调,修改
green_dyn的通道赋值即可:要红色就赋值给索引2的通道,要蓝色就赋值给索引0的通道,同时给两个通道赋值可实现黄色、紫色等其他色调。 - 调整
alpha参数即可修改两张图的透明度占比,适配你需要的最终效果。
内容的提问来源于stack exchange,提问作者A. Radek Martinez
相关产品推荐
相关产品推荐

