1

http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.htmlを提供するこのコードを見ました

//-- Localize the object
std::vector<Point2f> obj;
std::vector<Point2f> scene;

for( int i = 0; i < good_matches.size(); i++ )
{
    //-- Get the keypoints from the good matches
    obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt );
    scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt );
}

Mat H = findHomography( obj, scene, CV_RANSAC );

当然、同じ方法で findHomography にデータをロードしたいと思いました。だから私のコードは

std::vector<cv::Point2f> srcPoints();
std::vector<cv::Point2f> dstPoints();

cv::Mat homography = cv::findHomography(srcPoints, dstPoints, CV_RANSAC);

しかし、それは私に与えます

1>c:\main.cpp(65): エラー C2665: 'cv::findHomography': 2 つのオーバーロードのいずれもすべての引数の型を変換できませんでした 1> c:\opencv\build\include\opencv2\calib3d\calib3d. hpp(423): 'cv::Mat cv::findHomography(cv::InputArray,cv::InputArray,int,double,cv::OutputArray)' 1> c:\opencv\build\include\opencv2\ の可能性がありますcalib3d\calib3d.hpp(428): または 'cv::Mat cv::findHomography(cv::InputArray,cv::InputArray,cv::OutputArray,int,double)' 1> 引数リストの一致を試みている間 ' (オーバーロードされた関数、オーバーロードされた関数、int)' 1> 1>ビルドに失敗しました。

ベクトルの代わりに CV::Mat を使用すると機能しますが、サンプルと同じ形式が機能しない理由がわかりません。

4

1 に答える 1

0

ベクトル宣言の後に括弧を付けてはなりません。コードは次のようになります。

std::vector<cv::Point2f> srcPoints;
std::vector<cv::Point2f> dstPoints;

cv::Mat homography = cv::findHomography(srcPoints, dstPoints, CV_RANSAC);

ベクトルをポイントで埋めることを忘れたと思います。それ以外の場合は、 に通す前に実行してくださいfindHomography。書かれたコードは空のベクトルを引数として渡します。

于 2012-10-30T22:47:59.420 に答える