在多个矩形中裁剪图像,并在Python OpenCV中将它们合并为一个

时间:2018-05-03 04:12:07

标签: python numpy opencv slice

我被引用How to crop an image in OpenCV using Python,但我的问题有一点不同。

这可能是一个numpy-slicing问题。我知道我能做到:

import cv2
img = cv2.imread("test_image.jpg")
crop_img = img[y:y+h, x:x+w]

但是如果我需要两个具有相同y范围但是原始图片的非连续x范围的矩形怎么办?我试过了:

crop_img = img[y:y+h, [x1:x1+w1, x2:x2+w2]]

我所期望的是一个长度从yy+h的矩形,其宽度从x1x1+w1再加上x2到{{1其中x2+w2不一定等于x1+w1。然而,我得到x2“语法无效”。有没有办法正确实现我的目标?

1 个答案:

答案 0 :(得分:2)

你必须提取每个部分,然后在numpy的concatenate函数的帮助下连接。

import numpy as np

v1 = img[y:y+h, x1:x1+w1]
v2 = img[y:y+h, x2:x2+w2]

v = np.concatenate((v1, v2), axis=1)

或者:

indexes = ((x1, w1), (x2, w2))
v = np.concatenate([img[y: y+h , v1: v1+v2] for v1,v2 in indexes], axis=1)

另一种方式:

将索引创建为列表

v = img[y:y+h, list(range(x1, x1+w1)) + list(range(x2, x2 + w2))]