2017-06-06 96 views

回答

1

CvPoint2D32f類型是舊的/不贊成使用的類型。 OpenCV 2引入了類型Point2f來取代它。無論如何,你不需要Python中的那種類型。你可能需要的是一個dtype = np.float32的numpy數組。對於分,該陣列應當建立這樣的:

points = np.array([ [[x1, y1]], ..., [[xn, yn]] ], dtype=np.float32) 

你不會總是需要設置dtype,一些功能(如cv2.findHomography()爲例)將採取整數。

這些點的例子被使用,用圖片來自this tutorial,我們可以做到以下幾點,以找到並應用單應到圖像:

import cv2 
import numpy as np 

src = cv2.imread('book2.jpg') 
pts_src = np.array([[141, 131], [480, 159], [493, 630],[64, 601]], dtype=np.float32) 
dst = cv2.imread('book1.jpg') 
pts_dst = np.array([[318, 256],[534, 372],[316, 670],[73, 473]], dtype=np.float32) 

transf = cv2.getPerspectiveTransform(pts_src, pts_dst) 
warped = cv2.warpPerspective(src, transf, (dst.shape[1],dst.shape[0])) 

alpha = 0.5 
beta = 1 - alpha 
blended = cv2.addWeighted(warped, alpha, dst, beta, 1.0) 

cv2.imshow("Blended Warped Image", blended) 
cv2.waitKey(0) 

這將導致如下圖: Warped image showing the output of a transformation.

相關問題