home/ning/vscode/sift/sift.cpp: In function ‘int main(int, char**)’:
/home/ning/vscode/sift/sift.cpp:136:64: error: ‘__gnu_cxx::__alloc_traits<std::allocator<cv::Point_<float> > >::value_type {aka class cv::Point_<float>}’ has no member named ‘pt’
point1.push_back(point1[GoodMatchePoints[i].queryIdx].pt);
^
/home/ning/vscode/sift/sift.cpp:137:64: error: ‘__gnu_cxx::__alloc_traits<std::allocator<cv::Point_<float> > >::value_type {aka class cv::Point_<float>}’ has no member named ‘pt’
point2.push_back(point2[GoodMatchePoints[i].trainIdx].pt);
解决方法
手动编写透视变换矩阵
cv::Point2f img1srcQuad[]=
{
cv::Point2f(0,0),
cv::Point2f(img1.cols-1,0),
cv::Point2f(img1.cols-1,img_match.rows-1),
cv::Point2f(0,img1.rows-1)
};
cv::Point2f img1dstQuad[]={
cv::Point2f(img1.cols*0.05f,img1.rows*0.33f),
cv::Point2f(img1.cols*0.9f,img1.rows*0.25f),
cv::Point2f(img1.cols*0.8f,img1.rows*0.9f),
cv::Point2f(img1.cols*0.2f,img1.rows*0.7f)
};
Mat warp_mat=getPerspectiveTransform(img1srcQuad,img1dstQuad);
cout << "变换矩阵为:\n" << warp_mat << endl << endl;
Mat imageTransform1, imageTransform2;
cv::warpPerspective(img1,imageTransform1,warp_mat,img1.size(),img2.rows);
执行warpperspective时,一直报错,size类型不知如何设置
故将其设置为图片1 的大小img1。size()