Мне интересно обрезать несколько изображений набором угловых точек, которые у меня есть в массиве. Я хотел бы обрезать изображение и сохранить новые roi_1, roi_2 et c в массиве / списке, чтобы я мог отобразить их с помощью методов vstack / hstack.
У меня есть свои угловые точки ниже. получили из функции cv2.findContour()
и затем отфильтровали интересующие прямоугольники.
corner_points=[array([[[ 48, 521]],[[ 51, 560]],[[185, 558]],[[182, 519]]], dtype=int32), array([[[ 48, 376]],[[ 51, 413]],[[185, 411]],[[182, 372]]], dtype=int32), array([[[ 49, 199]],[[ 52, 236]],[[184, 232]],[[178,195]]], dtype=int32)]
Мой код
import cv2
import numpy as np
y_val=[]
for (x,y) in np.ndenumerate(corner_points):
y_val.append(y)
new_roi1=roi[y_val[7] : y_val[3], y_val[0]:y_val[4]] #my roi comes from another cropped image
new_roi2=roi[y_val[15] : y_val[11], y_val[8]:y_val[12]]
new_roi3=roi[y_val[23] : y_val[19], y_val[16]:y_val[20]]
hstack=np.hstack((new_roi3,new_roi2,new_roi1))
cv2.imshow('H Stack',hstack)
cv2.imshow("roi1",new_roi1)
cv2.imshow("roi2",new_roi2)
cv2.imshow("roi3",new_roi3)
Проблема в том, что мне нужно вручную вычислить y_val [i] - Как я могу получить его автоматически, выбрав нужные значения, например, y_val [7]: y_val [3], y_val [0]: y_val [4], y_val [15]: y_val [11], y_val [8]: y_val [ 12] et c
y_val=[]
new_roi=[]
for (x,y) in np.ndenumerate(corner_points):
y_val.append(y)
for i in range(len(y_val)):
new_roi.append(roi[y_val[i+7]:y_val[i+3],y_val[i]:y_val[i+3]])
Я пытаюсь что-то подобное.