Я пытаюсь растянуть изображение, чтобы оно имело реальные пропорции размера.Я знаю пропорции некоторых внутренних точек и использую эти точки, чтобы исказить перспективу изображения, но, похоже, ничего не работает.
Изображение можно получить здесь: https://drive.google.com/file/d/1LUnnzKHDcMw3GnQb7UCyjjs_LtPI8o_6/view?usp=sharing
Я пытался использовать cv2.warpPerspective на многих различных версиях этой проблемы, и все они работали нормально, но на этот раз это не работает.
import numpy as np
import cv2
image = cv2.imread("/Desktop/20190203071840.jpg", 1)
#bridge
image[750:760, 520:530] = [0, 255,0]
#river bend
image[900:910, 3200:3210] = [0, 0,255]
#railing
image[1650:1660, 530:540] = [255, 0,0]
#mid river
image[1640:1650, 3250:3260] = [255, 255,255]
ih, iw, _ = image.shape
#four corners of the image
#pts = np.array([[0,0], [iw,0],[0,ih],[iw,ih]], np.float32)
#bridge, river bend, railing, river/tree
pts = np.array([[750,520], [900, 3200], [1650,530], [1640,3250]], np.float32)
#real size mapping calculated with geometry
#top left, top rigt, bottom left, bottom right
dst = np.array([[0,0],[575,300],[645,235],[636,445]], np.float32)
#find transformation matrix
M = cv2.getPerspectiveTransform(pts, dst)
#create a background for our real-sized image
black = np.zeros((ih , iw, 3), np.uint8)
cv2.imwrite('black.jpg',black)
bh, bw, _ = black.shape
image = cv2.warpPerspective(image, M, (black.shape[1], black.shape[0]))
#resize and show image
image = cv2.resize(image, None, fx= .3, fy=.3, interpolation = cv2.INTER_LINEAR)
cv2.imshow("Original with Bounding Box and Ellipse", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Я ожидал, что прямоугольник создан из четырех точекв очках будет растягиваться в трапециевидную форму, созданную четырьмя точками в dst.Вместо этого изображение становится сильно искаженным.
Как я могу исправить это искажение?