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

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

老虎在前,恐龙在后,前面红色的就是我们的单目摄像头,看起来是不是很高大上,下篇博客将揭示里面的真面目
相机采集到前后对焦图像如下图所示,(对的并不好,之前可以调的很明显的,晚上光亮什么的都粗糙了) 前对焦:
后对焦:
再来看我们获得深度图像(恐龙的貌似效果很差,有待优化)
好了,接下来直接上代码与效果图
效果如下:
不是很好,哈哈,到此就结束了
深度图获取的不太好,有好的方法可以一起讨论!
参考链接:小魏的修行路
首先利用实验室的几个小动物创建场景,我们要做的事情很简单,将老虎和恐龙进行先后放置,然后把那匹马儿的图像插入恐龙和老虎之间,计算机会根据深度信息进行合理的显示马儿的身体部分,被前面老虎遮挡的部分则不显示,以往的贴图则是直接显示马儿,后面将重合的部分一点点的消除掉才会达到这种效果。(要用到的小动物依次排队,如下图所示)
摆好的场景如下图所示:
老虎在前,恐龙在后,前面红色的就是我们的单目摄像头,看起来是不是很高大上,下篇博客将揭示里面的真面目
相机采集到前后对焦图像如下图所示,(对的并不好,之前可以调的很明显的,晚上光亮什么的都粗糙了) 前对焦:
后对焦:
再来看我们获得深度图像(恐龙的貌似效果很差,有待优化)
好了,接下来直接上代码与效果图
#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; }
效果如下:
不是很好,哈哈,到此就结束了

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 图像深度简笔
- 下一篇: 基于深度学习的单目图像深度估计