我被引用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]]
我所期望的是一个长度从y
到y+h
的矩形,其宽度从x1
到x1+w1
再加上x2
到{{1其中x2+w2
不一定等于x1+w1
。然而,我得到x2
“语法无效”。有没有办法正确实现我的目标?
答案 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))]