Обрезать изображение в несколько прямоугольников и объединить их в одно в Python OpenCV - PullRequest
0 голосов
/ 03 мая 2018

Меня упоминали Как обрезать изображение в OpenCV с использованием Python , но мой вопрос имеет небольшую разницу.

Это может быть проблема с кусочками. Я знаю, что могу сделать:

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 до x2+w2, где x1+w1 не нужно быть равным x2. Тем не менее я получаю SyntaxError с "неверным синтаксисом". Есть ли способ правильно достичь моей цели?

1 Ответ

0 голосов
/ 03 мая 2018

Вы должны извлечь каждую часть, а затем объединить с помощью функции concatenate numpy.

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))]
...