当前位置: 代码网 > 手机>品牌>手机系统 > 自动驾驶AVM环视算法--超广角模式/转向模式/3D碗型投影模式/窄边模式/车轮模式等的实现

自动驾驶AVM环视算法--超广角模式/转向模式/3D碗型投影模式/窄边模式/车轮模式等的实现

2024年07月28日 手机系统 我要评论
超广角模式/转向模式/3D碗型投影模式/窄边模式/车轮模式等的实现

测试环境

opencv310

参考:金书世界

算法源码获取:

链接:链接:https://pan.baidu.com/s/1eyelf2wllktjunwxvswxfg 提取码:k2un

算法的主要实现和运行结果的显示

全功能展示

截图

视频

avm全景的多视图模式--各功能合集

1、avm全景的多视图模式--碗型投影任意角度旋转展示

算法的原理:主要是是根据四个相机内外参数拼接图像,并将显示的结果图像投影到3d的碗型投影曲面。

主要的实现代码如下所示

    //设置输出显示的视频分辨率
	iplimage* img_avm_wan = cvcreateimage(cvsize(1280, 1440), 8, 3);
	//读取测试图片
	iplimage* img_f = cvloadimage("front.png");
	iplimage* img_b = cvloadimage("back.png");
	iplimage* img_l = cvloadimage("left.png");
	iplimage* img_r = cvloadimage("right.png");
	//设置输出视频分辨率和帧率
	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wan_angle.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	//定义参数结构体
	js_avm_obj avmdata_wan;
	//初始化虚拟相机的角度参数
	avmdata_wan.a_rx = 120; //[72 114]
	avmdata_wan.a_ry = 0;//[0 360]
	avmdata_wan.a_rz = 0;//[-20 20]
	//设置当前的运行步骤
	int stept_index = 0;
	while (1)
	{
		//初始化
		js_init_avm_pic(&avmdata_wan, img_avm_wan->width, img_avm_wan->height, 1);
		//运行函数
		js_getavm_top(&avmdata_wan, img_avm_wan->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_wan->width, img_avm_wan->height, img_avm_wan->nchannels, 1);

		//角度调整实现输出任意角度的视图
		switch (stept_index)
		{
		case 0://x轴
			avmdata_wan.a_rx = avmdata_wan.a_rx - 1;
			if (avmdata_wan.a_rx == 70)
			{
				stept_index = 1;
				avmdata_wan.a_ry = 0;
			}
			break;
		case 1://y轴
			avmdata_wan.a_ry = avmdata_wan.a_ry + 1;
			if (avmdata_wan.a_ry == 450)
			{
				stept_index = 2;
				avmdata_wan.a_rx = 90;
				avmdata_wan.a_rz = -20;
			}
			break;
		case 2://z轴
			avmdata_wan.a_rz = avmdata_wan.a_rz + 1;
			if (avmdata_wan.a_rz == 20)
			{
				stept_index = 3;
			}
			break;
		default:
			break;
		}
		if (stept_index == 3)break;


		cvshowimage("img", img_avm_wan);

		cvwriteframe(writer, img_avm_wan);
		cvwaitkey(10);

		free(avmdata_wan.ftable);
		free(avmdata_wan.btable);
		free(avmdata_wan.ltable);
		free(avmdata_wan.rtable);

	}

	cvreleasevideowriter(&writer);
	cvwaitkey(0);

测试结果视频

avm全景的多视图模式--碗型投影任意角度旋转展示

2、avm全景的后视模式--倒车模式

主要的功能:在启动倒车后输出后视的视图,用观察车辆后方是否安全。

主函数的测试代码

//设置输出显示的视频分辨率
	iplimage* img_avm_fblr = cvcreateimage(cvsize(1280, 1440), 8, 3);
	//设置输出视频分辨率和帧率
	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\fblr_b.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	//读取测试视频
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	//定义参数结构体
	js_avm_obj  avmdata_fblr;
	//初始化
	js_init_avm_fblr(&avmdata_fblr, img_avm_fblr->width, img_avm_fblr->height, 1);//b

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		//运行函数
		js_getavm_fblr(&avmdata_fblr, img_avm_fblr->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_fblr->width, img_avm_fblr->height, img_avm_fblr->nchannels, 1);
		
		cvwriteframe(writer, img_avm_fblr);


		cvshowimage("视频播放", img_avm_fblr);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频(由于当前的测试视频不是倒车的视频,所以视频及用于展示视角)

avm全景的后视模式--倒车模式

3、avm全景的左转弯模式--左转向模式

主要的功能:在启动转向后输出转向左视的视图,用观察车辆左方是否安全。

主函数的测试代码

iplimage* img_avm_fblr = cvcreateimage(cvsize(1280, 1440), 8, 3);
	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\fblr_l.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_fblr;

	js_init_avm_fblr(&avmdata_fblr, img_avm_fblr->width, img_avm_fblr->height, 2);//l

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_fblr(&avmdata_fblr, img_avm_fblr->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_fblr->width, img_avm_fblr->height, img_avm_fblr->nchannels, 1);

		cvwriteframe(writer, img_avm_fblr);


		cvshowimage("视频播放", img_avm_fblr);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的后视模式--左转向模式

4、avm全景的后视模式--行车模式

主要的功能:在行车状态下的前视的视图,用观察车辆前方是否安全。

主函数的测试代码

iplimage* img_avm_fblr = cvcreateimage(cvsize(1280, 1440), 8, 3);
	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\fblr_f.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_fblr;

	js_init_avm_fblr(&avmdata_fblr, img_avm_fblr->width, img_avm_fblr->height, 0);//f

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_fblr(&avmdata_fblr, img_avm_fblr->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_fblr->width, img_avm_fblr->height, img_avm_fblr->nchannels, 1);

		cvwriteframe(writer, img_avm_fblr);


		cvshowimage("视频播放", img_avm_fblr);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的后视模式--行车模式

5、avm全景的转弯模式--右转模式

主要的功能:在启动转向后输出转向右视的视图,用观察车辆右方是否安全。

主函数的测试代码

    iplimage* img_avm_fblr = cvcreateimage(cvsize(1280, 1440), 8, 3);
	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\fblr_r.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_fblr;
	js_init_avm_fblr(&avmdata_fblr, img_avm_fblr->width, img_avm_fblr->height, 3);//r

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_fblr(&avmdata_fblr, img_avm_fblr->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_fblr->width, img_avm_fblr->height, img_avm_fblr->nchannels, 1);
		cvwriteframe(writer, img_avm_fblr);


		cvshowimage("视频播放", img_avm_fblr);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的转弯模式--右转模式

6、avm全景的多视角模式--全景俯视模式模式

主要的功能:全景的俯视图主要用于观察车辆周围是否安全和盲区的监测。

主函数的测试代码

iplimage* img_avm_top = cvcreateimage(cvsize(1280, 1440), 8, 3);
	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\top.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_top;
	
	js_init_avm(&avmdata_top, img_avm_top->width, img_avm_top->height, 0);
	
	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_top(&avmdata_top, img_avm_top->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_top->width, img_avm_top->height, img_avm_top->nchannels, 0);

		cvwriteframe(writer, img_avm_top);


		cvshowimage("视频播放", img_avm_top);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的多视角模式,全景俯视模式模式

7、avm全景的超广角模式--右视超广角模式(当前拼接位置对齐存在问题,暂未解决)

主要的功能:超广角就是用观察正前方和左右两侧是否存在快速接近的物体,主要是视角大可以近视看到180度的视角。

主函数的测试代码

iplimage* img_avm_wideangle = cvcreateimage(cvsize(1280, 720), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wideangle_r.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 720));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_wideangle;
	js_init_avm_wideangle(&avmdata_wideangle, img_avm_wideangle->width, img_avm_wideangle->height, 1, 0);//0:f 1:b 



	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wideangle(&avmdata_wideangle, img_avm_wideangle->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_wideangle->width, img_avm_wideangle->height, img_avm_wideangle->nchannels, 1, 0);

		cvline(img_avm_wideangle, cvpoint(276, 0), cvpoint(276, 720), cv_rgb(0, 0, 0), 3);
		cvline(img_avm_wideangle, cvpoint(1003, 0), cvpoint(1003, 720), cv_rgb(0, 0, 0), 3);

		cvwriteframe(writer, img_avm_wideangle);


		cvshowimage("视频播放", img_avm_wideangle);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的超广角模式--右视超广角模式

8、avm全景的超广角模式--后视超广角模式(当前拼接位置对齐存在问题,暂未解决)

主要的功能:超广角就是用观察正前方和左右两侧是否存在快速接近的物体,主要是视角大可以近视看到180度的视角。

主函数的测试代码

	iplimage* img_avm_wideangle = cvcreateimage(cvsize(1280, 720), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wideangle_b.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 720));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_wideangle;
	js_init_avm_wideangle(&avmdata_wideangle, img_avm_wideangle->width, img_avm_wideangle->height, 1, 0);//0:f 1:b 

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wideangle(&avmdata_wideangle, img_avm_wideangle->imagedata, img_b->imagedata,img_f->width, img_f->height, img_avm_wideangle->width, img_avm_wideangle->height, img_avm_wideangle->nchannels, 1, 0);

		cvline(img_avm_wideangle, cvpoint(276, 0), cvpoint(276, 720), cv_rgb(0, 0, 0), 3);
		cvline(img_avm_wideangle, cvpoint(1003, 0), cvpoint(1003, 720), cv_rgb(0, 0, 0), 3);

		cvwriteframe(writer, img_avm_wideangle);


		cvshowimage("视频播放", img_avm_wideangle);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的超广角模式--后视超广角模式

9、avm全景的超广角模式--前视超广角模式(当前拼接位置对齐存在问题,暂未解决)

主要的功能:超广角就是用观察正前方和左右两侧是否存在快速接近的物体,主要是视角大可以近视看到180度的视角。

主函数的测试代码

iplimage* img_avm_wideangle  = cvcreateimage(cvsize(1280, 720), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wideangle_f.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 720));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, *img_b, *img_l, *img_r;
	js_avm_obj avmdata_wideangle;
	js_init_avm_wideangle(&avmdata_wideangle, img_avm_wideangle->width, img_avm_wideangle->height, 1,0);//0:f 1:b 

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{

		js_getavm_wideangle(&avmdata_wideangle, img_avm_wideangle->imagedata, img_f->imagedata, img_f->width, img_f->height, img_avm_wideangle->width, img_avm_wideangle->height, img_avm_wideangle->nchannels, 1, 0);

		cvline(img_avm_wideangle, cvpoint(276, 0), cvpoint(276, 720), cv_rgb(0, 0, 0), 3);
		cvline(img_avm_wideangle, cvpoint(1003, 0), cvpoint(1003, 720), cv_rgb(0, 0, 0), 3);

 		cvwriteframe(writer, img_avm_wideangle);


		cvshowimage("视频播放", img_avm_wideangle);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的超广角模式--前视超广角模式

10、avm全景的超广角模式--左视超广角模式(当前拼接位置对齐存在问题,暂未解决)

主要的功能:超广角就是用观察正前方和左右两侧是否存在快速接近的物体,主要是视角大可以近视看到180度的视角。

主函数的测试代码

	iplimage* img_avm_wideangle = cvcreateimage(cvsize(1280, 720), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wideangle_l.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 720));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_wideangle;

	js_init_avm_wideangle(&avmdata_wideangle, img_avm_wideangle->width, img_avm_wideangle->height, 1, 0);//0:f 1:b 


	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wideangle(&avmdata_wideangle, img_avm_wideangle->imagedata, img_l->imagedata, img_f->width, img_f->height, img_avm_wideangle->width, img_avm_wideangle->height, img_avm_wideangle->nchannels, 1, 0);

		cvline(img_avm_wideangle, cvpoint(276, 0), cvpoint(276, 720), cv_rgb(0, 0, 0), 3);
		cvline(img_avm_wideangle, cvpoint(1003, 0), cvpoint(1003, 720), cv_rgb(0, 0, 0), 3);

		cvwriteframe(writer, img_avm_wideangle);


		cvshowimage("视频播放", img_avm_wideangle);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的超广角模式--左视超广角模式

11、avm全景的车轮模式--行车左前车轮模式

主要的功能:在行车状态是左转时用于观察车辆左侧的近处是否存在刮碰车辆的风险。

主函数的测试代码

iplimage* img_avm_wheel = cvcreateimage(cvsize(1280, 1440), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wheel_fl.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_wheel;
	
	js_init_avm_wheel(&avmdata_wheel, img_avm_wheel->width, img_avm_wheel->height,0);//fl:0 fr:1 bl:2 br:3 

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wheel(&avmdata_wheel, img_avm_wheel->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_wheel->width, img_avm_wheel->height, img_avm_wheel->nchannels, 1,0);
		
		cvwriteframe(writer, img_avm_wheel);


		cvshowimage("视频播放", img_avm_wheel);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的车轮模式--行车左前车轮模式

12、avm全景的车轮模式--行车右前车轮模式

主要的功能:在行车状态是右转时用于观察车辆右侧的近处是否存在刮碰车辆的风险。

主函数的测试代码

	iplimage* img_avm_wheel = cvcreateimage(cvsize(1280, 1440), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wheel_fr.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_wheel;

	js_init_avm_wheel(&avmdata_wheel, img_avm_wheel->width, img_avm_wheel->height, 1);//fl:0 fr:1 bl:2 br:3 
	
	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wheel(&avmdata_wheel, img_avm_wheel->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_wheel->width, img_avm_wheel->height, img_avm_wheel->nchannels, 1, 1);
		
		cvwriteframe(writer, img_avm_wheel);


		cvshowimage("视频播放", img_avm_wheel);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的车轮模式--行车右前车轮模式

13、avm全景的车轮模式--倒车右后车轮模式

主要的功能:在倒车状态是左转时用于观察车辆左侧的近处是否存在刮碰车辆的风险。

主函数的测试代码

	iplimage* img_avm_wheel = cvcreateimage(cvsize(1280, 1440), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wheel_br.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_wheel;
	
	js_init_avm_wheel(&avmdata_wheel, img_avm_wheel->width, img_avm_wheel->height, 3);//fl:0 fr:1 bl:2 br:3 

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wheel(&avmdata_wheel, img_avm_wheel->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_wheel->width, img_avm_wheel->height, img_avm_wheel->nchannels, 1, 3);
		cvwriteframe(writer, img_avm_wheel);


		cvshowimage("视频播放", img_avm_wheel);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的车轮模式--倒车右后车轮模式

14、avm全景的车轮模式--倒车左后车轮模式

主要的功能:在到车状态是右转时用于观察车辆右侧的近处是否存在刮碰车辆的风险。

主函数的测试代码

	iplimage* img_avm_wheel = cvcreateimage(cvsize(1280, 1440), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\wheel_bl.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj  avmdata_wheel;

	js_init_avm_wheel(&avmdata_wheel, img_avm_wheel->width, img_avm_wheel->height, 2);//fl:0 fr:1 bl:2 br:3 

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_wheel(&avmdata_wheel, img_avm_wheel->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_wheel->width, img_avm_wheel->height, img_avm_wheel->nchannels, 1, 2);
		

		cvwriteframe(writer, img_avm_wheel);


		cvshowimage("视频播放", img_avm_wheel);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的车轮模式--倒车左后车轮模式

15、avm全景的窄边模式--倒车窄边模式

主要的功能:在倒车时通过比较窄的路段用于观察车辆两侧是否安全。

主函数的测试代码

iplimage* img_avm_narrowedge = cvcreateimage(cvsize(1280, 1440), 8, 3);


	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\narrowedge_b.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj  avmdata_narrowedge;
	
	js_init_avm_narrowedge(&avmdata_narrowedge, img_avm_narrowedge->width, img_avm_narrowedge->height, 1);//0f 

	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_narrowedge(&avmdata_narrowedge, img_avm_narrowedge->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_narrowedge->width, img_avm_narrowedge->height, img_avm_narrowedge->nchannels, 0);
		
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.lfsrc.x, avmdata_narrowedge.lfsrc.y), cvpoint(avmdata_narrowedge.lbsrc.x, avmdata_narrowedge.lbsrc.y), cv_rgb(255, 255, 0), 3);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.rfsrc.x, avmdata_narrowedge.rfsrc.y), cvpoint(avmdata_narrowedge.rbsrc.x, avmdata_narrowedge.rbsrc.y), cv_rgb(255, 255, 0), 3);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.lbsrc.x, avmdata_narrowedge.lbsrc.y), cvpoint(avmdata_narrowedge.lbsrc.x + 50, avmdata_narrowedge.lbsrc.y), cv_rgb(255, 255, 0), 3);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.rbsrc.x - 50, avmdata_narrowedge.rbsrc.y), cvpoint(avmdata_narrowedge.rbsrc.x, avmdata_narrowedge.rbsrc.y), cv_rgb(255, 255, 0), 3);


		cvwriteframe(writer, img_avm_narrowedge);


		cvshowimage("视频播放", img_avm_narrowedge);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的窄边模式--倒车窄边模式

16、avm全景的窄边模式--行车窄边模式

主要的功能:在行车时通过比较窄的路段用于观察车辆两侧是否安全。

主函数的测试代码

	iplimage* img_avm_narrowedge = cvcreateimage(cvsize(1280, 1440), 8, 3);

	cvvideowriter* writer = cvcreatevideowriter("g:\\csdn\\avm\\video1\\narrowedge_f.avi", cv_fourcc('x', 'v', 'i', 'd'), 25, cvsize(1280, 1440));
	cvnamedwindow("视频播放", cv_window_autosize);
	cvcapture* c_img_f = cvcreatefilecapture("g:\\csdn\\avm\\video1\\front.avi");
	cvcapture* c_img_b = cvcreatefilecapture("g:\\csdn\\avm\\video1\\back.avi");
	cvcapture* c_img_l = cvcreatefilecapture("g:\\csdn\\avm\\video1\\left.avi");
	cvcapture* c_img_r = cvcreatefilecapture("g:\\csdn\\avm\\video1\\right.avi");
	iplimage* img_f, * img_b, * img_l, * img_r;
	js_avm_obj avmdata_narrowedge;

	js_init_avm_narrowedge(&avmdata_narrowedge, img_avm_narrowedge->width, img_avm_narrowedge->height,0);//0f 
	img_f = cvqueryframe(c_img_f);
	img_b = cvqueryframe(c_img_b);
	img_l = cvqueryframe(c_img_l);
	img_r = cvqueryframe(c_img_r);
	int num = 0;
	while (img_f = cvqueryframe(c_img_f))
	{
		img_b = cvqueryframe(c_img_b);
		img_l = cvqueryframe(c_img_l);
		img_r = cvqueryframe(c_img_r);
		js_getavm_narrowedge(&avmdata_narrowedge, img_avm_narrowedge->imagedata, img_f->imagedata, img_b->imagedata, img_l->imagedata, img_r->imagedata, img_f->width, img_f->height, img_avm_narrowedge->width, img_avm_narrowedge->height, img_avm_narrowedge->nchannels, 0);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.lfsrc.x, avmdata_narrowedge.lfsrc.y), cvpoint(avmdata_narrowedge.lbsrc.x, avmdata_narrowedge.lbsrc.y), cv_rgb(255, 255, 0), 3);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.rfsrc.x, avmdata_narrowedge.rfsrc.y), cvpoint(avmdata_narrowedge.rbsrc.x, avmdata_narrowedge.rbsrc.y), cv_rgb(255, 255, 0), 3);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.lfsrc.x, avmdata_narrowedge.lfsrc.y), cvpoint(avmdata_narrowedge.lfsrc.x+ 50, avmdata_narrowedge.lfsrc.y), cv_rgb(255, 255, 0), 3);
		cvline(img_avm_narrowedge, cvpoint(avmdata_narrowedge.rfsrc.x-50, avmdata_narrowedge.rfsrc.y), cvpoint(avmdata_narrowedge.rfsrc.x, avmdata_narrowedge.rfsrc.y), cv_rgb(255, 255, 0), 3);


		cvwriteframe(writer, img_avm_narrowedge);


		cvshowimage("视频播放", img_avm_narrowedge);
		char c = cvwaitkey(1);
		if (c == 27)break;
		num++;
	}
	cvreleasevideowriter(&writer);
	cvreleasecapture(&c_img_f);
	cvreleasecapture(&c_img_b);
	cvreleasecapture(&c_img_l);
	cvreleasecapture(&c_img_r);
	cvdestroywindow("视频播放");

测试结果视频

avm全景的窄边模式--行车窄边模式

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com