Учитывая координаты четырех произвольных точек на изображении (которые гарантированно образуют прямоугольник), я хочу извлечь патч, который они представляют, и получить их векторизованное (плоское) представление. Как я могу это сделать?
Я видел ответ на этот вопрос и, используя его, я смог добраться до нужного мне патча. Например, учитывая координаты изображения 4 углов зеленого прямоугольника на этом изображении:
Я могу добраться до патча и получить что-то вроде:
используя следующий код:
p1 = (334,128)
p2 = (438,189)
p3 = (396,261)
p4 = (292,200)
pts = np.array([p1, p2, p3, p4])
mask = np.zeros((img.shape[0], img.shape[1]))
cv2.fillConvexPoly(mask, pts, 1)
mask = mask.astype(np.bool)
out = np.zeros_like(img)
out[mask] = img[mask]
patch = img[mask]
cv2.imwrite(img_name, out)
Однако проблема в том, что полученная мною переменная patch
представляет собой просто массив всех пикселей изображения, которые принадлежат заплатке, когда изображение читается в виде матрицы в главном порядке строк.
Я хочу, чтобы переменная patch
содержала пиксели в том порядке, в котором они могут сформировать подлинное изображение, чтобы я мог выполнять над ним операции. Есть ли функция opencv, о которой я должен знать, которая помогла бы мне в этом?
Спасибо!