OpenCV perspectiveTransform破碎的功能

时间:2015-08-18 12:17:56

标签: homography

我试图使用perspectiveTransform,但我一直在收到错误。我试图遵循这个帖子http://answers.opencv.org/question/18252/opencv-assertion-failed-for-perspective-transform/

的解决方案

_players [i] .getCoordinates()的类型为Point

_homography_matrix是一个3 x 3 Mat

    Mat temp_Mat = Mat::zeros(2, 1, CV_32FC2);

    for (int i = 0; i < _players.size(); i++)
    {
        cout << Mat(_players[i].get_Coordinates()) << endl;
        perspectiveTransform(Mat(_players[i].get_Coordinates()), temp_Mat, _homography_matrix);
    }

另外,如何将temp_Mat转换为Point类型?

OpenCV错误:cv :: perspectiveTransform中的断言失败(scn + 1 == m.cols)

1 个答案:

答案 0 :(得分:1)

基本上你只需要纠正

Mat(_players[i].get_Coordinates()) ... 

Mat2f(_players[i].get_Coordinates()) ... 

在第一种情况下,您要创建一个2x1,1通道浮点矩阵,在第二种情况下(正确),您将创建一个1x1,2通道浮点矩阵。

您也不需要初始化temp_Mat

您还可以使用模板Mat_来更好地控制Mat的类型。例如。创建Mat类型CV_32FC2相当于创建Mat2f

此示例代码还将向您展示如何在MatPoint之间来回转换:

#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;

int main()
{
    // Some random points
    vector<Point2f> pts = {Point2f(1,2), Point2f(5,10)};

    // Some random transform matrix
    Mat1f m(3,3, float(0.1));

    for (int i = 0; i < pts.size(); ++i)
    {
        cout << "Point: " << pts[i] << endl;

        Mat2f dst;
        perspectiveTransform(Mat2f(pts[i]), dst, m);

        cout << "Dst mat: " << dst << endl;

        Point2f p(dst(0));
        cout << "Dst point: " << p << endl;
    }
    return 0;
}