如何用Python生成两个二进制掩码的中间平均掩码?
解决二值掩码平均生成中间掩码的问题
你的代码有两个核心问题导致结果不符合预期:
- 读取方式错误:
cv2.imread默认读取彩色三通道图像,而二值掩码是单通道灰度图,多通道的平均计算会干扰结果。 - 数据类型未转换:
np.mean计算后输出的是浮点型数组,直接传入cv2.threshold会因类型不匹配导致异常处理,最终结果出错。
修正后的代码
import cv2 import numpy as np # 以灰度模式读取二值掩码(单通道) current_im = cv2.imread('ENGR1.png', cv2.IMREAD_GRAYSCALE) new_im = cv2.imread('k9TFi.png', cv2.IMREAD_GRAYSCALE) # 计算像素级均值,保持浮点型避免精度丢失 middle_im = np.mean([current_im, new_im], axis=0) # 转换为8位无符号整数(cv2处理图像的标准类型) middle_im = middle_im.astype(np.uint8) # 阈值处理:均值≥127时设为255(白色),否则0(黑色) _, middle_im = cv2.threshold(middle_im, 127, 255, cv2.THRESH_BINARY) # 保存或查看结果 cv2.imwrite('middle_mask.png', middle_im) cv2.imshow('Middle Mask', middle_im) cv2.waitKey(0) cv2.destroyAllWindows()
额外说明
如果你的二值掩码是基于0/1的(而非0/255),只需调整阈值参数为0.5,并在读取后做归一化处理即可。核心逻辑始终是单通道读取→浮点均值计算→类型转换→二值化。
内容的提问来源于stack exchange,提问作者James Hall
相关产品推荐
相关产品推荐

