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

Python使用OpenCV裁剪图像时传入变量触发imshow报错问题

错误根因分析

你遇到的size.width>0 && size.height>0报错,本质是裁剪得到的cropped_image是空数组,核心原因是你硬编码了画面宽高w=1280、h=720,但实际摄像头返回的shifted_img分辨率和这个值不匹配,导致计算出来的裁剪坐标超出了图像的实际边界,数组切片得到空值。
你手写结束坐标时能正常运行,是因为手写值刚好落在图像实际的尺寸范围内。

解决步骤

  • 第一步:不要硬编码宽高,从实际画面中读取宽高
    OpenCV读取的图像格式为(高度, 宽度, 通道数),因此要先从shifted_img中提取真实的宽高参数,替换原有的硬编码值:
    # 从实际图像中获取宽高
    h, w = shifted_img.shape[:2]
    crop_factor = 0.5
    
  • 第二步:计算裁剪坐标后增加边界校验,避免超出图像范围
    可以用max()、min()函数做自动截断,防止坐标越界:
    x_crop_start = max(0, int((w - w*crop_factor)/2))
    x_crop_end = min(w, int(w - x_crop_start))
    y_crop_start = max(0, int((h - h*crop_factor)/2))
    y_crop_end = min(h, int(h - y_crop_start))
    
    cropped_image = shifted_img[y_crop_start:y_crop_end, x_crop_start:x_crop_end]
    
  • 第三步(可选调试):增加打印语句确认参数合理性
    # 输出实际参数和裁剪范围,方便定位问题
    print(f"实际图像宽高:{w}*{h},裁剪范围x:[{x_crop_start}:{x_crop_end}], y:[{y_crop_start}:{y_crop_end}]")
    

内容的提问来源于stack exchange,提问作者Iacopo Boccalari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:03