透视变换又称四点变换,所以不能用于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());