2012-03-21 103 views
12

對於opencv,python2封裝中的「getPerspectiveTransform」似乎有些不同。對於初學者來說,它需要兩個參數,而不是預期的三個。是getPerspectiveTransform在opencv python2包裝中破碎?

所以不是第一個封裝的:

cv.GetPerspectiveTransform(source,destination,3x3mat) 

它現在:

cv2.getPerspectiveTransform(?,?) 

如果我試圖把在兩組四四VERT座標作爲參數,像這樣:

cv2.getPerspectiveTransform(first_set_of_corners, second_set_of_corners) 

它吐出以下錯誤:

cv2.error: C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\imgwarp. 
cpp:3194: error: (-215) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV 
_32F) == 4 

如果checkVectors不應該等於四(因此quadrangle中的「quad」),那麼我不確定它對我的要求。和python2 wrapper中的其他所有東西一樣,這個特性完全沒有記錄,所以我不知道它是否被破壞,或者更可能是我做錯了。有沒有人設法讓這個工作正常?

回答

20

cv2.getPerspectiveTransform不會中斷。

可能是,你的觀點不是長度4或他們可能不是float32數字。

嘗試以下操作:

import cv2 
import numpy as np 

img = cv2.imread('1original.jpg',0) 

src = np.array([[50,50],[450,450],[70,420],[420,70]],np.float32) 
dst = np.array([[0,0],[299,299],[0,299],[299,0]],np.float32) 

ret = cv2.getPerspectiveTransform(src,dst) 
print ret 

結果是:

[[ 8.36097696e-01 -4.51944700e-02 -3.95451613e+01] 
[ -4.51944700e-02 8.36097696e-01 -3.95451613e+01] 
[ 6.45161290e-05 6.45161290e-05 1.00000000e+00]] 
+0

是啊。後者是我的問題。謝謝! – Snesticle 2012-03-24 23:10:08

+1

是的,我從另一個錯誤中結束了。有沒有簡單的方法知道它需要float32?文檔字符串或OpenCV手冊頁都沒有提到它需要cv2.getPerspectiveTransform的float32數字。 – 2013-06-13 20:37:51

+1

@darkgreen - 錯誤消息中的檢查是針對'CV_32F';神祕,但一旦你看到它就很有意義 – sapi 2013-07-17 02:46:57