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

在Jupyter Notebook中提取粘贴图像时为何出现ValueError?

问题:图像区域复制粘贴时的维度不匹配报错

我用Jupyter Notebook、OpenCV、Matplotlib和NumPy做学校的计算机视觉项目,要从图像里提取一块区域,粘贴到同一图像的其他位置(用y/x轴的切片)。之前运行正常,现在一直报错。

我的代码

img = cv2.imread('Images/flower.jpg')
flower = img[2000:3200, 1300:2800]
img[0:1200, 0:1500] = img[1200:2400, 1500:3000] = img[2400:3600, 3000:4500] = flower

plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('more flowers')
plt.axis('on')
plt.show()

报错信息

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[12], line 3
      1 img = cv2.imread('Images/flower.jpg')
      2 flower = img[2000:3200, 1300:2800]
----> 3 img[0:1200, 0:1500] = img[1200:2400, 1500:3000] = img[2400:3600, 3000:4500] = flower
      5 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
      6 plt.title('more flowers')

ValueError: could not broadcast input array from shape (1200,1500,3) into shape (1200,770,3)

解决方案

错误原因

报错明确显示:要粘贴的flower形状是(1200,1500,3),但最后一个目标区域img[2400:3600, 3000:4500]实际形状是(1200,770,3)——你的原始图像宽度不足4500像素,3000到4500的切片实际只有770像素宽,两者宽度不匹配,导致无法完成赋值。

解决步骤

  1. 先确认图像实际尺寸:添加代码打印图像的高度和宽度,避免凭经验写切片范围:
    img = cv2.imread('Images/flower.jpg')
    print(img.shape)  # 输出格式为(高度, 宽度, 通道数),比如(3600, 3770, 3)
    
  2. 调整切片范围匹配尺寸:根据打印出的实际宽度,修改目标区域的切片,确保每个目标区域的高度和宽度都和flower完全一致(1200高、1500宽)。比如如果图像总宽度是3770,那最后一个区域的x轴切片不能到4500,最多只能到3000+1500=4500,但如果图像宽度不够,就得换个目标位置,或者缩小flower的提取范围。
  3. 可选:强制缩放匹配(会变形):如果必须把flower放到这个区域,可以用cv2.resize()把flower缩放到目标区域的尺寸:
    # 先获取目标区域的形状
    target_h, target_w = img[2400:3600, 3000:4500].shape[:2]
    resized_flower = cv2.resize(flower, (target_w, target_h))
    # 再赋值
    img[0:1200, 0:1500] = img[1200:2400, 1500:3000] = img[2400:3600, 3000:4500] = resized_flower
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:25:26