• 自动驾驶AVM环视算法--540度全景的算法实现和exe测试demo


    参考:金书世界

    540度全景影像是什么

    540度全景影像是在360度全景影像基础上的升级功能,它增加了更多的摄像头来收集周围的图像数据。通常,这些摄像头分布在车辆的更多位置,例如车顶、车底等,以便更全面地捕捉车辆周围的情况。在开启全景影像功能时,这些摄像头收集的图像数据会被系统处理并拼接在一起,形成一个从车顶鸟瞰的全景俯视图。这种视图可以提供更全面的视野,帮助驾驶员更好地了解车辆周围的环境,从而提高驾驶安全性和便利性。

    更新:测试的exe程序,无需解压码就可以体验算法测试效果

    链接:https://pan.baidu.com/s/1iOFRd0bWQsbt7mx1ADvL-g 提取码:97nk 

    1、压缩包解压后显示如下所示

    测试文件包括:可执行的exe文件、测试的视频等。

    2.双击exe就可以运行测试程序,测试程序界面显示如下所示:

    3、540度全景按钮如下所示

    视频效果

    AVM全景的多视图模式--549度全景

    4、540全景算法实现代码如下所示

    1. //MFC弹出命令窗体
    2. AllocConsole();
    3. freopen("CONOUT$", "w", stdout);
    4. //MFC弹出命令窗体
    5. int ww = 10;
    6. cvNamedWindow("视频播放", CV_WINDOW_AUTOSIZE); //创建用于显示的窗体
    7. sprintf(g_Test_Video_Path_D, "video1\\Down.avi");
    8. sprintf(g_Test_Video_Path_F, "video1\\Front.avi");
    9. sprintf(g_Test_Video_Path_B, "video1\\Back.avi");
    10. sprintf(g_Test_Video_Path_L, "video1\\Left.avi");
    11. sprintf(g_Test_Video_Path_R, "video1\\Right.avi");
    12. IplImage* img_AVM_540 = cvCreateImage(cvSize(JS_AVM_IMGW, JS_AVM_IMGH), 8, 3);
    13. CvVideoWriter* writer = cvCreateVideoWriter("result\\540.avi", CV_FOURCC('X', 'V', 'I', 'D'), 25, cvSize(JS_AVM_IMGW, JS_AVM_IMGH));
    14. CvCapture* C_img_F = cvCreateFileCapture(g_Test_Video_Path_F); //读取前视测试视频
    15. CvCapture* C_img_B = cvCreateFileCapture(g_Test_Video_Path_B); //读取后视测试视频
    16. CvCapture* C_img_L = cvCreateFileCapture(g_Test_Video_Path_L); //读取左视测试视频
    17. CvCapture* C_img_R = cvCreateFileCapture(g_Test_Video_Path_R); //读取右视测试视频
    18. CvCapture* C_img_D = cvCreateFileCapture(g_Test_Video_Path_D); //读取右视测试视频
    19. IplImage* img_F, * img_B, * img_L, * img_R, * img_D; //定义各个视图的图像
    20. IplImage* CarImage = cvLoadImage("top.png");
    21. js_AVM_obj AVMData_540;
    22. js_init_avm_540(&AVMData_540, img_AVM_540->width, img_AVM_540->height, 0);
    23. IplImage* CarImageResize = cvCreateImage(cvSize(AVMData_540.RFsrc.x - AVMData_540.LFsrc.x + 2 * ww, AVMData_540.LBsrc.y - AVMData_540.LFsrc.y + 2 * ww), 8, 3);
    24. cvResize(CarImage, CarImageResize);
    25. int num = 0;
    26. while (img_F = cvQueryFrame(C_img_F))
    27. {
    28. img_B = cvQueryFrame(C_img_B);
    29. img_L = cvQueryFrame(C_img_L);
    30. img_R = cvQueryFrame(C_img_R);
    31. img_D = cvQueryFrame(C_img_D);
    32. js_getAVM_540(&AVMData_540, img_AVM_540->imageData, img_F->imageData, img_B->imageData, img_L->imageData, img_R->imageData, img_D->imageData, img_F->width, img_F->height, img_AVM_540->width, img_AVM_540->height, img_AVM_540->nChannels, 0);
    33. js_DrawCar(img_AVM_540, CarImageResize, AVMData_540.LFsrc.x - ww, AVMData_540.LFsrc.y - ww, CarImageResize->width, CarImageResize->height);
    34. Mat img = cvarrToMat(img_AVM_540);
    35. putTextZH(img, " 金书世界 \nwww.jinshushijie.com", CvPoint(10, 20), Scalar(0, 0, 255), 30, "楷体", false, false);
    36. cvWriteFrame(writer, img_AVM_540);
    37. cvShowImage("视频播放", img_AVM_540);
    38. char c = cvWaitKey(1);
    39. if (c == 27)break;
    40. num++;
    41. }
    42. cvReleaseVideoWriter(&writer); //释放视频保存的结构体
    43. cvReleaseCapture(&C_img_F); //释放前视的图像结构体
    44. cvReleaseCapture(&C_img_B); //释放前视的图像结构体
    45. cvReleaseCapture(&C_img_L); //释放前视的图像结构体
    46. cvReleaseCapture(&C_img_R); //释放前视的图像结构体
    47. cvReleaseCapture(&C_img_D); //释放前视的图像结构体
    48. cvDestroyWindow("视频播放"); //释放显示的窗体

  • 相关阅读:
    openssl官网文档资料
    这份公众号运营攻略,可以帮你系统地运营好公众号
    65.【警告 阅读前请喝水,挺干的。让你认清指针数组和数组指针 (超详版)】
    BUUCTF test_your_nc
    【Java学习Note】第8章 多线程
    從turtle海龜動畫 學習 Python - 高中彈性課程系列 6.1 內嵌正多邊形 類似禪繞圖
    数据结构实验
    DALL·E-2是如何工作的以及部署自己的DALL·E模型
    Redis分布式锁故障,我忍不住想爆粗...
    JDBC的基本使用(mysql与java)
  • 原文地址:https://blog.csdn.net/jinshushijie/article/details/140281632