透视变换又称四点变换,所以不能用于5边形这样的图形变换,不是真正的透视变换,但是这个方法可以把机器人看到的图像转换为俯视图,这样就可以建立地图,要不然怎么建立地图呢。
void CrelaxMyFriendDlg::OnBnClickedOk()
{
hdc = this->GetDC()->GetSafeHdc();
// TODO: 在此添加控件通知处理程序代码
string addrImg = "c:/Users/actorsun/Pictures/";
string addrVideo = "c:/Users/actorsun/Videos/";
string addr = addrImg + "1.png";
Mat relax, positive, gray;
relax = imread(addr);
Point2f src_points[4];
Point2f dst_points[4];
src_points[0] = Point2f(100, 100);
src_points[1] = Point2f(500, 100);
src_points[2] = Point2f(150, 600);
src_points[3] = Point2f(450, 610);
dst_points[0] = Point2f(0, 0);
dst_points[1] = Point2f(227,0);
dst_points[2] = Point2f(0, 227);
dst_points[3] = Point2f(227, 227);
Mat rotation, img_warp;
rotation = getPerspectiveTransform(src_points, dst_points);
warpPerspective(relax, img_warp, rotation, relax.size());
imshow(img_warp);
imshow(gray);
//在运动物体上面画个矩形框,像我的监控一样
}
意思意思就可以了。
那2函数很简单的:
格式:Mat getPerspectiveTransform(四个点数组,四个点数组,第三个参数不用管);
格式:warpPerspective(srcMat,dstMat,上面那个函数返回值即转换矩阵,尺寸一般是srcMat.size());