使用projectPoints函数创建透视图到俯视图的坐标映射表后,详见:OpenCV的projectPoints函数用法https://blog.youkuaiyun.com/lyq_12/article/details/82800790
调用如下函数,实现透视图到俯视图的转换过程。
//实现透视图到俯视图的转换过程
void convertFunc( Mat &srcImg, Mat &dstImg, Mat &conversion)
{
//遍历dstImg高度
for (int i = 0; i < 800; i++)
{
//取dstImg的指针
uchar* pDstData = dstImg.ptr<uchar>(i);
//遍历dstImg宽度
for(int j = 0; j < 420; j++)
{
int u = conversion.at<short>(0, i * 420 + j);
int v = conversion.at<short>(1, i * 420 + j);
//判断是非越界,保证(u,v)在srcImg图像范围内
if ((0 <= u && u < 1600) && (0 <= v && v < 800))
{
//单通道转换
//pDstData[j] = srcImg.at<uchar>(v,u);
//三通道转换
pDstData[3*j] = srcImg.at<Vec3b>(v,u)[0];
pDstData[3*j+1] = srcImg.at<Vec3b>(v,u)[1];
pDstData[3*j+2] = srcImg.at<Vec3b>(v,u)[2];
}
}
}
}
效果如下:
srcImg dstImg