【问题标题】:OpenCV perspective transform in pythonpython中的OpenCV透视变换
【发布时间】:2014-02-20 11:09:00
【问题描述】:

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

任何人都可以看到出了什么问题吗?

【问题讨论】:

  • 接受一个答案,因此它看起来已解决,并会帮助其他遇到同样问题的人。

标签: python opencv image-processing


【解决方案1】:

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

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 图像转换为适当的数据类型。

【讨论】:

  • 这可以从您的参考资料中找到:“该函数转换一组稀疏的 2D 或 3D 向量” - 此函数与转换图像无关,请查看 @AldurDisciple 答案
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    它说图像应该是np.float32np.float64

    所以先通过img_cv2 = np.float32(img_cv2)转换图片。

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

    查看 this tutorial 以获取演示

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2018-04-24
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多