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全景的窄边模式--行车窄边模式
发表评论