OpenCV perspectiveTransform 破坏函数
OpenCV perspectiveTransform broken function
我正在尝试使用 perspectiveTransform,但总是出现错误。我尝试按照此线程 http://answers.opencv.org/question/18252/opencv-assertion-failed-for-perspective-transform/
中的解决方案
_players[i].getCoordinates() 的类型是 Point
_homography_matrix 是一个 3 x 3 的垫子
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 错误:断言失败 (scn + 1 == m.cols) cv::perspectiveTransform
基本上你只需要从
Mat(_players[i].get_Coordinates()) ...
到
Mat2f(_players[i].get_Coordinates()) ...
在第一种情况下,您创建了一个 2x1、1 通道浮点矩阵,在第二种情况(正确)中,您创建了一个 1x1、2 通道浮点矩阵。
您也不需要初始化 temp_Mat
。
您还可以使用模板 Mat_
来更好地控制 Mat
的类型。例如。创建 CV_32FC2
类型的 Mat
等同于创建 Mat2f
.
此示例代码还将向您展示如何在 Mat
和 Point
之间来回转换:
#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;
}
我正在尝试使用 perspectiveTransform,但总是出现错误。我尝试按照此线程 http://answers.opencv.org/question/18252/opencv-assertion-failed-for-perspective-transform/
中的解决方案_players[i].getCoordinates() 的类型是 Point
_homography_matrix 是一个 3 x 3 的垫子
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 错误:断言失败 (scn + 1 == m.cols) cv::perspectiveTransform
基本上你只需要从
Mat(_players[i].get_Coordinates()) ...
到
Mat2f(_players[i].get_Coordinates()) ...
在第一种情况下,您创建了一个 2x1、1 通道浮点矩阵,在第二种情况(正确)中,您创建了一个 1x1、2 通道浮点矩阵。
您也不需要初始化 temp_Mat
。
您还可以使用模板 Mat_
来更好地控制 Mat
的类型。例如。创建 CV_32FC2
类型的 Mat
等同于创建 Mat2f
.
此示例代码还将向您展示如何在 Mat
和 Point
之间来回转换:
#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;
}