我正在尝试纠正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>
有人能看出出了什么问题吗?
答案 0 :(得分:2)
源图像和目标图像必须是浮点数据。
cv2.perspectiveTransform(src,m [,dst])→dst
<强>参数强>:
- src - 输入双通道或三通道浮点数组;每个元素都是要转换的2D / 3D矢量。
- dst - 输出与src相同大小和类型的数组。
- m - 3x3或4x4浮点变换矩阵。
因此将8U图像转换为适当的数据类型。
答案 1 :(得分:2)
我认为你想要的是cv2.warpPerspective
(参见文档(link)),而不是cv2.perspectiveTransform
。
答案 2 :(得分:0)
它表示图片应为np.float32
或np.float64
。
首先按img_cv2 = np.float32(img_cv2)
转换图片。
然后应用cv2.perspectiveTransform()
和cv2.warpPerspective()
检查 this tutorial 以获取演示