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

Python OpenCV:同Y范围非连续X区域裁剪拼接为单图像问题

解决OpenCV中裁剪不连续X区域并拼接的问题

嘿,我明白你的需求了!你尝试的img[y:y+h, [x1:x1+w1, x2:x2+w2]]写法之所以不行,是因为numpy的切片规则不允许直接在第二维度放置两个切片区间——它没法解析这种格式。不过解决思路很直接,分两步就能搞定:先分别裁剪两个目标区域,再把它们横向拼接起来。

具体实现步骤

  1. 导入依赖库:除了OpenCV,还需要用到numpy的数组拼接功能
  2. 读取图像:和你原来的操作一致
  3. 分别裁剪两个区域:因为Y范围完全一致,所以两个裁剪区域的高度都是h
  4. 横向拼接两个区域:用numpy的hstack或者concatenate函数完成拼接

完整代码示例

import cv2
import numpy as np

# 读取图像
img = cv2.imread("test_image.jpg")

# 定义裁剪参数(根据你的实际需求替换这些值)
y, h = 100, 200  # Y起始坐标和高度
x1, w1 = 50, 150 # 第一个区域的X起始坐标和宽度
x2, w2 = 300, 150# 第二个区域的X起始坐标和宽度

# 分别裁剪两个区域
crop1 = img[y:y+h, x1:x1+w1]
crop2 = img[y:y+h, x2:x2+w2]

# 横向拼接两个区域
# 方法1:使用hstack(简洁直观)
combined_img = np.hstack((crop1, crop2))
# 方法2:使用concatenate(更灵活,适合复杂拼接场景)
# combined_img = np.concatenate([crop1, crop2], axis=1)

# 查看结果(可选)
cv2.imshow("Combined Cropped Image", combined_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存结果(可选)
# cv2.imwrite("combined_crop.jpg", combined_img)

补充说明

  • 因为你两个区域的Y范围完全一致,裁剪出来的crop1和crop2高度相同,横向拼接不会有问题。如果高度不一致,numpy会直接抛出错误,这一点需要注意。
  • 如果你需要拼接更多不连续的X区域,只需要继续裁剪对应的区域,然后把所有裁剪结果放到hstack或concatenate的参数里就行,比如np.hstack((crop1, crop2, crop3))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:34:00