OpenCV-带有深度信息图的贴图(增强现实)

OpenCV创建Mat矩阵并进行带有深度信息的贴图

贴图是一件很简单得事情,我利用单目深度图像的算法进行得到的深度图信息进行贴图,也就是图片会根据深度信息进行该显示的地方显示,不该显示的地方遮挡,听起来是不是很有趣。
表示愿意活在二次元的世界里出不来


首先利用实验室的几个小动物创建场景,我们要做的事情很简单,将老虎和恐龙进行先后放置,然后把那匹马儿的图像插入恐龙和老虎之间,计算机会根据深度信息进行合理的显示马儿的身体部分,被前面老虎遮挡的部分则不显示,以往的贴图则是直接显示马儿,后面将重合的部分一点点的消除掉才会达到这种效果。(要用到的小动物依次排队,如下图所示


摆好的场景如下图所示:


老虎在前,恐龙在后,前面红色的就是我们的单目摄像头,看起来是不是很高大上,下篇博客将揭示里面的真面目


相机采集到前后对焦图像如下图所示,(对的并不好,之前可以调的很明显的,晚上光亮什么的都粗糙了)
前对焦:



后对焦:


再来看我们获得深度图像(恐龙的貌似效果很差,有待优化)


好了,接下来直接上代码与效果图

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace cv;
int main()
{
	Mat horseImage = cv::imread("horseBlack1.bmp"); //马的图片放在工程第一层目录下即可
	cv::Mat mask = cv::imread("horseBlack1.bmp",0);
	Mat pfiImage = imread("Image.jpg");
	cv::Mat pfiImage_ROI = pfiImage(cv::Rect(0,342,2592,1260));
	cv::Mat oriPfiImage=pfiImage_ROI.clone();
	int value_width = 620;
	cv::Mat imageROI = pfiImage_ROI(cv::Rect(value_width,200,horseImage.cols,horseImage.rows));
	horseImage.copyTo(imageROI,mask);
	namedWindow("source",WINDOW_NORMAL);
	imshow("source",pfiImage_ROI);
	cv::Mat depthImage = cv::imread("m_depth.bmp",0);
	
	int nr = depthImage.rows;
	int nc = depthImage.cols;

	for(int i = 0;i < nr;i++)
	 {
		 uchar* data = depthImage.ptr<uchar>(i);
		 //uchar* pfiImage_ROI_data = pfiImage_ROI.ptr<uchar>(i);
		 //uchar* oriPfiImage_data = oriPfiImage.ptr<uchar>(i);
         for (int j = 0; j < nc; j++)
			{
				if(data[j] <120)
				{
					 pfiImage_ROI.at<Vec3b>(i,j)[0] = oriPfiImage.at<Vec3b>(i,j)[0];
					 pfiImage_ROI.at<Vec3b>(i,j)[1] = oriPfiImage.at<Vec3b>(i,j)[1];
					 pfiImage_ROI.at<Vec3b>(i,j)[2] = oriPfiImage.at<Vec3b>(i,j)[2];
					//pfiImage_ROI_data[j] = oriPfiImage_data[j];
				}
			}
	}
	namedWindow("result picture",WINDOW_NORMAL);
	imshow("result picture",pfiImage_ROI);
	waitKey();
	return 0;
}

效果如下:

不是很好,哈哈,到此就结束了吐舌头
深度图获取的不太好,有好的方法可以一起讨论!
参考链接:小魏的修行路

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值