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