我正在尝试拉伸图像,使其具有真实尺寸比例。我知道一些内部点的比例,并且正在使用这些点扭曲图像的透视图,但是似乎没有任何作用。
可以在此处获取图像: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()
我希望从pts中的四个点创建的矩形会延伸到由dst中四个点创建的梯形形状。相反,图像变得严重失真。
我该如何解决这种失真?