warpPerspective

时间:2012-06-04 23:32:10

标签: c++ image-processing opencv

我尝试使用以下代码获取反向透视图以实时捕捉到相机平面的帧:

Mat dst;
    dst=dst.zeros(frame.cols,frame.rows,frame.type());  

    if(Found){

     Mat mmat;
     mmat.create(3,3,CV_32FC1);
     mmat=getPerspectiveTransform(templPoints,imgPoints);
     cout<< mmat<<endl<<endl;
     warpPerspective(frame,dst,Homo,dst.size(),INTER_LINEAR );
     imshow("out",dst);
    }

问题是dst图片是全黑的,我的代码出了什么问题?

enter image description here

2 个答案:

答案 0 :(得分:3)

您看到的图像通常是以错误的顺序将源点发送到getPerspectiveTransform的结果。这意味着这些点彼此交叉并且将出现三角形形状。检查点的顺序,确保它们与目标点的顺序一致。

答案 1 :(得分:1)

您需要提供更多详细信息。 你为什么要同时调用findHomography和getPerspectiveTransform?由于你同时调用两者,我假设templPoints和imgPoints都是4,在这种情况下,对findHomography的调用是多余的(RANSAC对你没有任何作用)。

您是否在mmat * templPoints的值上查看(例如使用matlab或八度音程,或手动)?它们应该等于imgPoints,并且都在[0,dst.width] x [0,dst.height]