1

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

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 图像完全是黑色的,我的代码有什么问题?

在此处输入图像描述

4

2 回答 2

3

您看到的图像通常是getPerspectiveTransform按错误顺序发送源点的结果。这意味着这些点相互交叉,将出现三角形。检查点的顺序并确保它们与目标点的顺序相匹配。

于 2012-06-06T06:50:44.213 回答
1

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

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

于 2012-06-05T20:13:17.293 回答