【问题标题】:is getPerspectiveTransform broken in opencv python2 wrapper?getPerspectiveTransform 在 opencv python2 包装器中是否损坏?
【发布时间】:2012-03-21 16:16:38
【问题描述】:

opencv 的 python2 包装器中的“getPerspectiveTransform”似乎有问题。首先,它需要两个参数,而不是预期的三个。

所以不是第一个包装器的:

cv.GetPerspectiveTransform(source,destination,3x3mat)

现在是:

cv2.getPerspectiveTransform(?,?)

如果我尝试输入两组四个四边形垂直坐标作为参数,如下所示:

cv2.getPerspectiveTransform(first_set_of_corners, second_set_of_corners)

它吐出以下错误:

cv2.error: C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\imgwarp.
cpp:3194: error: (-215) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV
_32F) == 4

如果 checkVectors 不应该等于四(因此是四边形中的“四边形”),那么我不确定它想要从我这里得到什么。与 python2 包装器中的所有其他内容一样,此功能完全没有文档记录,因此我不知道它是否已损坏,或者更有可能是我做错了。这里有没有人设法让它正常工作?

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    cv2.getPerspectiveTransform 无论如何都没有损坏。

    可能是,您的点的长度不是 4,或者它们可能不是 float32 数字。

    尝试以下:

    import cv2
    import numpy as np
    
    img = cv2.imread('1original.jpg',0)
    
    src = np.array([[50,50],[450,450],[70,420],[420,70]],np.float32)
    dst = np.array([[0,0],[299,299],[0,299],[299,0]],np.float32)
    
    ret = cv2.getPerspectiveTransform(src,dst)
    print ret
    

    结果是:

    [[  8.36097696e-01  -4.51944700e-02  -3.95451613e+01]
     [ -4.51944700e-02   8.36097696e-01  -3.95451613e+01]
     [  6.45161290e-05   6.45161290e-05   1.00000000e+00]]
    

    【讨论】:

    • 是的,我因另一个错误而来到这里。有什么简单的方法可以知道它想要float32吗?文档字符串或 OpenCV 手册页都没有提到它需要 cv2.getPerspectiveTransform 的 float32 数字。
    • @darkgreen - 错误消息中的检查是针对CV_32F;很神秘,但是一看就明白了
    • 谢谢,这对我也有帮助。我将代码更改为 cv2.getPerspectiveTransform(np.float32(points1), np.float32(points2))
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多