You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用cv2.bitwise_and触发输入参数尺寸不匹配错误,如何解决?

问题分析与解决方案

错误原因

你遇到的Sizes of input arguments do not match错误,本质是通道数不匹配:

  • cv2.imread(image_file)读取的是3通道的BGR图像(形状为(高度, 宽度, 3))
  • 你通过cv2.COLOR_GRAY2BGRA将单通道灰度mask转成了4通道的BGRA图像(形状为(高度, 宽度, 4))
    两者通道数不同,导致cv2.bitwise_and无法执行运算。

修正方案

方案一:直接使用单通道mask作为掩码(推荐)

cv2.bitwise_and支持传入单通道mask作为第三个参数,自动作用于图像的每个通道,无需转换通道数:

def remove_watermark(image_file, mask_file, output_file):
    image = cv2.imread(image_file)
    mask = cv2.imread(mask_file, cv2.IMREAD_GRAYSCALE)
    blurred_mask = cv2.GaussianBlur(mask, (5, 5), 0)
    _, binary_mask = cv2.threshold(blurred_mask, 127, 255, cv2.THRESH_BINARY)
    # 直接用binary_mask作为掩码,无需转BGRA
    result = cv2.bitwise_and(image, image, mask=binary_mask)
    cv2.imwrite(output_file, result)

方案二:统一通道数(将图像转成4通道)

如果需要保留4通道格式,可以把原图像转成BGRA,再和4通道mask运算:

def remove_watermark(image_file, mask_file, output_file):
    image = cv2.imread(image_file)
    # 转成BGRA4通道
    image_bgra = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
    mask = cv2.imread(mask_file, cv2.IMREAD_GRAYSCALE)
    blurred_mask = cv2.GaussianBlur(mask, (5, 5), 0)
    _, binary_mask = cv2.threshold(blurred_mask, 127, 255, cv2.THRESH_BINARY)
    alpha_mask = cv2.cvtColor(binary_mask, cv2.COLOR_GRAY2BGRA)
    result = cv2.bitwise_and(image_bgra, alpha_mask)
    cv2.imwrite(output_file, result)

额外注意:路径转义问题

Windows路径中的反斜杠\可能被识别为转义字符(比如\i),建议用原始字符串或双反斜杠:

image_file = r'I:\python\lpo\images\cf.jpg' 
mask_file = r'I:\python\lpo\images\heko.png'  
output_file = r'I:\python\lpo\images\iwo.png'  

内容的提问来源于stack exchange,提问作者Jykito Kha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:33:14