2014-02-20 72 views
3

我想在Python中糾正圖像。我有一個Homography H(從旋轉矩陣圍繞x,y和z軸旋轉),例如: [[9.95671447e-01 7.83610423e-02 7.47993630e + 02] [-7.69292630e- 02 9.96586377e-01 -4.48354859e + 02] [-3.48494755e-06 1.73615469e-06 9.98300856e-01]在Python中的OpenCV透視變換

我想我能做到這一點woth cv2.perspectiveTransform(),但我cant't得到它工作。這是我的代碼使用方法:

# warp image 
    img_cv2 = cv2.imread('surf.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE) 
    # strange output but it does something: 
    dst = cv2.perspectiveTransform(img_cv2,H) 

,但我得到了以下錯誤:

Traceback (most recent call last): 
    File "C:\directory structure\python_files\Rectification\rectify.py", line 82, in <module> 
    dst = cv2.perspectiveTransform(img_cv2,H) 
    error: C:\slave\WinInstallerMegaPack\src\opencv\modules\core\src\matmul.cpp:1916: error: (-215) scn + 1 == m.cols && (depth == CV_32F || depth == CV_64F)`</pre> 

任何人都能看出什麼錯誤?

+0

接受一個答案,因此它看起來像解決了問題,並會幫助其他人來解決這個問題。 –

回答

2

源和目標圖像必須是浮點數據。

cv2.perspectiveTransform(src, m[, dst]) → dst

Parameters:

  • src – input two-channel or three-channel floating-point array; each element is a 2D/3D vector to be transformed.
  • dst – output array of the same size and type as src.
  • m – 3x3 or 4x4 floating-point transformation matrix.

參見:http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=perspectivetransform#cv2.perspectiveTransform

的8U圖像,轉換爲相應的數據類型。

+0

這就是你可以從你的參考找到的:「函數轉換一個稀疏的2D或3D矢量集」 - 這個函數不是關於變換圖像,看@AldurDisciple答案 –

0

它說圖像應該是np.float32np.float64

因此先將圖像轉換爲img_cv2 = np.float32(img_cv2)

然後應用cv2.perspectiveTransform()cv2.warpPerspective()

檢查this tutorial用於演示

2

我想你想要的是cv2.warpPerspective(見文檔(link)),而不是cv2.perspectiveTransform