Python中的OpenCV透视变换

3
我正在尝试在Python中矫正一张图片。我有一个单应性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>

有人能看出问题出在哪里吗?


接受一个答案,这样它就会被标记为已解决,并且有助于其他遇到相同问题的人。 - Anoop K. Prabhu
3个回答

2

这是您参考资料中可以找到的内容:“该函数将稀疏的二维或三维向量集转换” - 该函数不是用于转换图像的,请查看@AldurDisciple的答案。 - Fedor Chervinskii

2
我认为你需要的是cv2.warpPerspective(请参阅文档(链接)),而不是cv2.perspectiveTransform

0

文中提到图像应该是np.float32或者np.float64类型。

所以首先需要通过img_cv2 = np.float32(img_cv2)将图像转换为相应类型。

然后再使用cv2.perspectiveTransform()cv2.warpPerspective()函数进行处理。

请参考本教程获取演示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接