Qt+OpenCV实时显示在地图空间中的位置

来源:互联网 发布:ubuntu安装wireshark 编辑:程序博客网 时间:2024/05/19 21:00

    有个类似于自动行驶小车的项目,使用摄像头检测贴在地上的地标,并在上位机实时显示当前小车所处的位置,上位机是Ubuntu系统。

    做上位机的界面用的是Qt,里面也配置好了OpenCV,用起来很方便,现在要解决的是如何设计一个地图,并且每次实时显示当前的位置。因为没有可借鉴的资料,我就根据激光雷达那个数据界面的启发,想到办法,可能比较笨,如果大家有更好的方法,请务必指教!我考虑的方法是先把地上的标志对应到地图上,对应成一个12*12的网格,然后用OpenCV生成这个空的网格地图,然后程序运行时加载这幅地图,地图长这个样:

                                                                         

    然后当小车在地上运行扫描到标志时,就可以得到当前所在的位置,然后在就在对应的交点上画一个红点,当进行到下一点时,用一个白点覆盖上一步的点,再画一个红点,也就是红点总是代表当前点,而用白点代表走过的点,程序的结果是这个样:

                                                                         

    附上很简单的打点部分的代码段:

int xData=1000,yData=1000;                                //保证一开始的点在地图外边CvPoint pCirLast=cvPoint(xData,yData);cvCircle(mapImage,pCirLast,10,CV_RGB(255,255,255),-1);    //每次把上一步的点用白色标记yData=480-40*(((int)text[3]-48)+((int)text[2]-48)*10);    xData=(((int)text[4]-48)*10+((int)text[5]-48)+6)*40;      CvPoint pCirNew=cvPoint(xData,yData);           cvCircle(mapImage,pCirNew,10,CV_RGB(255,0,0),-1);         //把当前的点用红色标记mapQImage=Mat2QImage(mapImage);ui->showLocateLabel->clear();ui->showLocateLabel->setPixmap(QPixmap::fromImage(mapQImage));


0 0