2017-06-06 92 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.

相关问题