Python中的OpenCV透视变换

时间:2014-02-20 11:09:01

标签: python opencv image-processing

我正在尝试纠正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]]

我以为我可以做到这一点cv2.perspectiveTransform(),但是我无法让它发挥作用。这是我使用的代码:

   # 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>

有人能看出出了什么问题吗?

3 个答案:

答案 0 :(得分:2)

源图像和目标图像必须是浮点数据。

  

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

     

<强>参数

     
      
  • src - 输入双通道或三通道浮点数组;每个元素都是要转换的2D / 3D矢量。
  •   
  • dst - 输出与src相同大小和类型的数组。
  •   
  • m - 3x3或4x4浮点变换矩阵。
  •   

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

因此将8U图像转换为适当的数据类型。

答案 1 :(得分:2)

我认为你想要的是cv2.warpPerspective(参见文档(link)),而不是cv2.perspectiveTransform

答案 2 :(得分:0)

它表示图片应为np.float32np.float64

首先按img_cv2 = np.float32(img_cv2)转换图片。

然后应用cv2.perspectiveTransform()cv2.warpPerspective()

检查 this tutorial 以获取演示