【问题标题】:OpenCV perspectiveTransform broken functionOpenCV 透视变换破函数
【发布时间】:2015-08-18 12:17:55
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: homography


    【解决方案1】:

    基本上你只需要改正

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

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

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

    您也不需要初始化temp_Mat

    您还可以使用模板Mat_ 来更好地控制Mats 的类型。例如。创建CV_32FC2 类型的Mat 等效于创建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;
    }
    

    【讨论】:

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