用opencv将左右眼视角图片转换为红蓝3D图片

1 篇文章 0 订阅

用opencv将左右眼视角图片转换为红蓝3D图片

最近在做裸眼3D的研究,由于裸眼3D的屏在实验室,家里没有设备实验。于是就买了一个红蓝3D眼镜。试着用opencv将左右眼3D图片转换为红蓝3D图片。
首先准备一副红蓝3D眼镜。就是这种,或者普通的就行。


然后就是了解红蓝3D的原理了。3D眼睛是为了让左右眼看到的图片不同从而让人觉得是自己的眼睛看到了物体的两个视角。

一个图片可以分解为RGB,三个通道(红绿蓝)。红蓝3D图片原理就是将两个视角的图片合成。左眼镜片是红色的。所以将左视角图片的红色通道降低或者去掉,同理去掉右视角图片的蓝色通道。然后合成就成了红蓝3D图片。

在这里我选择的是用谷歌地球做实验。打开谷歌地球后,点击右边旋转可以得到地球不同的视角。然后用QQ截图截取左右视角(QQ截图可以调整图片的大小,为了图像的位置正确,我们使截图框直接与地球相切)



(左视角,为了方便读者们实验,图片未作缩放处理,可直接下载该图实验)

(右视角,为了方便读者们实验,图片未作缩放处理,可直接下载该图实验)
最后直接上代码,从注释上看应该就不用过多的解释了。

#include <highgui.h>
#include<cv.h>
#include<cxcore.h>
int main()
{
	IplImage *LeftImg = cvLoadImage("E://SOUR//左边.png");				//载入右边图像
	IplImage *RightImg = cvLoadImage("E://SOUR//右边.png");				//载入图片
	IplImage* OUT = cvCreateImage(cvGetSize(LeftImg), IPL_DEPTH_8U, 3);		//定义输出图片与左右视角 图片大小一致
	IplImage* LeftImgRImg = cvCreateImage(cvGetSize(LeftImg), IPL_DEPTH_8U, 1);	//定义左右视角图片各个通道图片
	IplImage* LeftImgGImg = cvCreateImage(cvGetSize(LeftImg), IPL_DEPTH_8U, 1);
	IplImage* LeftImgBImg = cvCreateImage(cvGetSize(LeftImg), IPL_DEPTH_8U, 1);
	IplImage* RightImgRImg = cvCreateImage(cvGetSize(RightImg), IPL_DEPTH_8U, 1);
	IplImage* RightImgGImg = cvCreateImage(cvGetSize(RightImg), IPL_DEPTH_8U, 1);
	IplImage* RightImgBImg = cvCreateImage(cvGetSize(RightImg), IPL_DEPTH_8U, 1);
	cvSplit(LeftImg, LeftImgBImg, LeftImgGImg, LeftImgRImg,NULL);			//左视角图片RGB通道分解
	cvSplit(RightImg, RightImgBImg, RightImgGImg, RightImgRImg, NULL);		//右视角RGB通道分解
	cvMerge(RightImgBImg, RightImgGImg, LeftImgGImg, 0, OUT);
	cvShowImage("LeftImg", LeftImg);		//显示左视角图片
	cvShowImage("RightImg", RightImg);		//显示右视角图片
	cvShowImage("out", OUT);			//显示结果图片
	cvWaitKey(0);					//中断等待
	cvReleaseImage(&LeftImg);			//销毁
	cvReleaseImage(&RightImg);
	cvReleaseImage(&OUT);
	cvReleaseImage(&LeftImgRImg);
	cvReleaseImage(&LeftImgGImg);
	cvReleaseImage(&LeftImgBImg);
	cvReleaseImage(&RightImgRImg);
	cvReleaseImage(&RightImgGImg);
	cvReleaseImage(&RightImgBImg);
}


实验结果和效果图片

(实验结果图)


(最后输出,未经缩放)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值