利用红蓝分色原理制作三维图片及三维视频.docx
- 文档编号:24766159
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:18
- 大小:7.31MB
利用红蓝分色原理制作三维图片及三维视频.docx
《利用红蓝分色原理制作三维图片及三维视频.docx》由会员分享,可在线阅读,更多相关《利用红蓝分色原理制作三维图片及三维视频.docx(18页珍藏版)》请在冰豆网上搜索。
利用红蓝分色原理制作三维图片及三维视频
实验二
一、问题描述
根据人眼三维视觉形成的原理,利用红蓝分色原理制作三维图片与三维视频。
二、问题分析
三维图像:
步骤:
1.利用手机/相机等摄像设备,拍摄大小相同的左眼图与右眼图
2.利用OpenCV读入左眼图与右眼图,假设左眼图像第i个像素颜色向量为(R1_i,G1_i,B1_i);右眼图像第i个像素颜色为(R2_i,G2_i,B2_i),则合成后的立体图像第i个像素为(R1_i,G2_i,B2_i);利用OpenCV显示并保存合成后的图像
3.利用红蓝眼镜观察立体效果是否明显,如果不明显,请重复1~2
难点:
在拍摄左眼图与右眼图时有技巧:
由于人的两眼间存在一个不足5厘米的间距,因此在盯住同一景物时,两个眼球的角度并不相同。
因此我们的拍摄也必须模拟这一原理,对同一景物拍摄两张照片,而且拍摄时需要略微变换一下拍摄角度(这个角度很小,约5~10度)。
其次为了达到更好的合成效果,目标最好选择一些前背景比较分明的景物,如果能用单反拍摄出背景虚化的照片就更好。
三维视频:
利用拍摄图片的方法拍摄左眼视频与右眼视频,然后利用OpenCV读取左眼与右眼视频中的每一帧图像,利用上述方法合成三维图像,并利用OpenCV保存成.avi格式的视频。
难点:
如何保持左眼视频与右眼视频在时间上的同步
三、详细设计(从算法到程序)
1.主模块设计
三维图片:
#include"iostream"
#include"cmath"
usingnamespacestd;
usingnamespacecv;
intmain()
{
Matleft=imread("211.jpg");//加载图片
Matright=imread("212.jpg");
inti,j;
for(i=0;i { uchar*p=left.ptr uchar*q=right.ptr for(j=0;j { //左图BG通道转换为右图的BG通道,R通道不变 p[j*3]=q[j*3]; p[j*3+1]=q[j*3+1]; p[j*3+2]=p[j*3+2]; } } Matimg; resize(left,img,Size(800,600),0,0,CV_INTER_LINEAR);//固定输出图片大小 namedWindow("output"); imshow("output",img); waitKey(0); } 三维视频 #include #include #include #include #include #include usingnamespacestd; usingnamespacecv; //帧合并 voidVedioTransfer(Mat_ for(introw=0;row uchar*dataLeft=VedioL.ptr uchar*dataRight=VedioR.ptr for(intcol=0;col dataLeft[col*3]=dataRight[col*3];//同理转换左视频BG通道 dataLeft[col*3+1]=dataRight[col*3+1]; } } } intmain(intargc,char*argv[]){ Mat_ Mat_ VideoCaptureCL; VideoCaptureCR; constchar*VedioLPath="1.mov";//获取视频途径 constchar*VedioRPath="2.mp4"; CL.open(VedioLPath);//逐贞打开视频 CR.open(VedioRPath); if(! CL.isOpened()){ cout<<"无法打开1.mov文件\n"; waitKey(0); } if(! CR.isOpened()){ cout<<"无法打开2.mp4文件\n"; waitKey(0); } //视频转换 boolisStop=false; namedWindow("frameVedio",1); VideoWriteroutputvideo; outputvideo.open("3d.avi",0,24,Size(1920,1080),true);//输出 while(! isStop){//判断视频文件结束 CL>>VedioL;//captureVedio.read(frameVedio); CR>>VedioR; if(VedioL.data&&VedioR.data){//循环获得视频文件的帧 VedioTransfer(VedioL,VedioR); outputvideo< imshow("frameVedio",VedioL); if(waitKey(30)==30){ isStop=true; }//读取时间,遇到esc退出 } else{ isStop=true; }//播放完毕 } outputvideo.release(); return0; } 四、调试与测试 六组3d图片: 第一组: 成品: 第二组: 成品: 第三组: 成品: 第四组: 成品: 第五组: 成品: 第六组: 成品: 五、心得与体会 效果: 3d图片的效果部分不是很明显,比如第一张和第三张,有很严重的重影。 但第二张和第五张的效果比较好,尤其是第二张,几乎没有重影,能看到比较明显的3d效果。 3d视频的效果比较差,可能是拍摄的时候的角度和位置没有取好,而且画面的移动幅度过大,速度过快,观看时有一种晕眩的感觉,重影也比较严重。 困难及解决方法: 代码方面,3d图片的代码比较简单,主要在于获取图片每个像素点的通道并进行转移,再将新图片输出显示。 3d视频较复杂,主要在于需要用逐帧动画的方法来合成视频,即获取视频后,将视频按帧看做一张张图片,并用3d图片转换法转换每一张图片,即完成视频的转换,最后将视频保存并输出,输出大小为1920*1080。 技巧: 主要技巧在于拍摄,即用逆时针旋转5度的效果比较好,但旋转比较难以把握,很容易造成画面主体不在同一位置。 所以我将相机显示网格线,将主体按三分法放在两条线的交汇处,即一个焦点,两次拍摄将主体放于同一焦点,保证物体在同一位置。 此外,除第一张用手机拍摄外,其余均用单反拍摄,调至大光圈,拍摄单一光源下的单一物体,拍出大景深的效果,背景虚化,突出主体,效果更佳,例如图二。 而3d视频的拍摄则将两个同一型号的手机叠放并将靠近自己那端的手机向外平移5cm露出摄像头,用手固定,并同时拍摄同一场景。 基于分色原理的三维图像的优缺点: 优点: 技术难度低,成本低廉,拍摄方便,易于制作与合成。 缺点: 3D画质效果不是很好,画面边缘易偏色,需要红蓝眼镜辅助才能达到3d效果。 目前3D电影院、3D液晶电视等 大多采用的是偏光式3D技术,也叫偏振式3D技术,属于被动式3D技术,眼镜价格也较为便宜。 和快门式3D技术一样,偏光式3D也细分出了很多种类,比如应用于投影机行业的偏光式3D需要两台以上性能参数完全相同的投 影机才能实现3D效果,而应用于电视行业的偏光式3D技术则需要画面具有240Hz或者480Hz以上的刷新率。 我对于还处于研发阶段的裸眼式3d技术憧憬,待此技术成熟,即会迎来一个全新的时代,一个真3d时代。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 分色 原理 制作 三维 图片 视频