Python OpenCV:同Y范围非连续X区域裁剪拼接为单图像问题
解决OpenCV中裁剪不连续X区域并拼接的问题
嘿,我明白你的需求了!你尝试的img[y:y+h, [x1:x1+w1, x2:x2+w2]]写法之所以不行,是因为numpy的切片规则不允许直接在第二维度放置两个切片区间——它没法解析这种格式。不过解决思路很直接,分两步就能搞定:先分别裁剪两个目标区域,再把它们横向拼接起来。
具体实现步骤
- 导入依赖库:除了OpenCV,还需要用到numpy的数组拼接功能
- 读取图像:和你原来的操作一致
- 分别裁剪两个区域:因为Y范围完全一致,所以两个裁剪区域的高度都是
h - 横向拼接两个区域:用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
相关产品推荐
相关产品推荐

