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

OpenCV调用cv2.bitwise_and报输入参数尺寸不匹配错误如何解决

问题原因

报错核心是cv2.bitwise_and要求参与运算的两个输入图像的宽、高、通道数完全一致。你手动创建的画布imgCanvas是固定1280×720分辨率,但摄像头默认采集的实时帧尺寸和该数值不匹配,因此触发尺寸不匹配错误。
末尾的异步回调警告是Windows平台Media Foundation视频后端的已知问题,不影响核心功能,嫌烦可以直接按下面的方法消除。

解决步骤

第一步:对齐两个图像的分辨率

两种方案选其一即可:

  • 方案1:强制设置摄像头输出分辨率和画布一致
  • 方案2:动态获取摄像头帧分辨率,以此创建对应尺寸的画布(适配所有摄像头,兼容性更强)

第二步:可选消除警告

初始化摄像头时指定DirectShow后端即可消除末尾的警告。

修改后代码示例

import cv2
import numpy as np

# 初始化摄像头,加cv2.CAP_DSHOW参数消除Windows平台警告
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

# ========== 方案1:强制设置摄像头输出分辨率为1280*720 ==========
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
# 画布尺寸和摄像头输出对齐
imgCanvas = np.zeros((720, 1280, 3), np.uint8)

# ========== 方案2:动态适配摄像头分辨率(优先使用) ==========
# 先读一帧测试帧获取实际尺寸
# ret, test_frame = cap.read()
# if not ret:
#     print("摄像头读取失败")
#     exit()
# h, w = test_frame.shape[:2]
# # 用实际帧尺寸创建画布,完全对齐
# imgCanvas = np.zeros((h, w, 3), np.uint8)

while True:
    # 读取摄像头帧
    ret, img = cap.read()
    if not ret:
        break
    
    # 如果用方案1且摄像头不支持1280*720,加一行resize强制对齐
    # img = cv2.resize(img, (1280, 720))
    
    # 原有图像处理逻辑
    imgGray = cv2.cvtColor(imgCanvas, cv2.COLOR_BGR2GRAY)
    _, imgInv = cv2.threshold(imgGray, 50, 255, cv2.THRESH_BINARY_INV)
    imgInv = cv2.cvtColor(imgInv, cv2.COLOR_GRAY2BGR)
    
    # 位运算部分现在两个输入尺寸完全一致,不会报错
    img = cv2.bitwise_and(img, imgInv, mask=None)
    img = cv2.bitwise_or(img, imgCanvas, mask=None)
    
    cv2.imshow("Camera", img)
    # 按q退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

注意事项

cv2.resize的第二个参数是(宽,高),和numpy数组shape返回的(高,宽,通道)顺序相反,调整尺寸时不要写反顺序,否则还是会出现尺寸不匹配问题。

内容的提问来源于stack exchange,提问作者Glenn Ramadhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:03