本次实验包含两个题目

  • 砖块的检测与位姿估计
  • 窗户的检测与位姿估计

2019-4-28更新:

  • 针对4类RGB-D数据,已将深度数据和可见光数据进行对齐
  • 给出数据读取的代码demo
  • 给出相机的内参信息
  • 注:此次更新将会替换之前数据集的说明

数据下载链接:https://pan.baidu.com/s/1Zu7l5GCHbzP-dxHvSba5Fg 提取码:34xe
在文件夹OpenCV实验1中2019-4-27更新中,为一个压缩包

1 砖块的检测与位姿估计

现有三种尺寸的砖块,尺寸信息已知,要求检测出砖块,并计算出其姿态信息。

  • 砖(小):尺寸0.30m×0.20m×0.20m。其中,RGB数据存储在视频文件brick-small.bag.rgb.avi,可使用cv::VideoCapture进行读取。深度数据存储在brick-small.bagdepth.txt,此文件为二进制文件,读取方法在后面的demo代码中。视频文件brick-small.bag.rgbdepth.avi为深度数据彩色化结果。

  • 砖(中):尺寸0.60m×0.20m×0.20m。其中,RGB数据存储在视频文件brick-medium.bag.rgb.avi,可使用cv::VideoCapture进行读取。深度数据存储在brick-medium.bagdepth.txt。视频文件brick-medium.bag.rgbdepth.avi为深度数据彩色化结果。

  • 砖(大):尺寸1.20m×0.20m×0.20m。其中,RGB数据存储在视频文件brick-large.bag.rgb.avi,可使用cv::VideoCapture进行读取。深度数据存储在brick-large.bagdepth.txt。视频文件brick-large.bag.rgbdepth.avi为深度数据彩色化结果。

注:每个砖块颜色和尺寸固定,可以基于这个合作信息进行处理

2 窗户的检测与位姿估计

采集的是新主楼的室内窗户,暂无尺寸信息,可以自己去量下。

RGB数据存储在视频文件windows-close.bag.rgb.avi,可使用cv::VideoCapture进行读取。深度数据存储在windows-close.bagdepth.txt。视频文件windows-close.bag.rgbdepth.avi为深度数据彩色化结果。

3 相关资料

3.1 数据读取代码

下面给出每组数据的读取方法,每组视频共有3个文件,brick-large.bag.rgb.avibrick-large.bag.rgbdepth.avibrick-large.bagdepth.txt,可见光数据存储在imgC中,数据类型为CV_8UC3,深度数据存储在imgD中,数据类型为CV_16UC1。

int main()
{string root_path = "E:\\深度数据\\";string base_name = "windows-close.bag";VideoCapture caprgb(root_path + base_name + ".rgb.avi"); // 打开可见光视频if (!caprgb.isOpened()){cout << "无法打开可见光视频:" << root_path + base_name + ".rgb.avi" << endl;}VideoCapture capdeprgb(root_path + base_name + ".rgbdepth.avi"); // 打开深度图可视化视频if (!capdeprgb.isOpened()){cout << "无法打开深度图可视化视频:" << root_path + base_name + ".rgbdepth.avi" << endl;}ifstream infile(root_path + base_name + "depth.txt", ios::binary); // 打开深度数据if (!infile.is_open()){cout << "无法打开深度图数据:" << root_path + base_name + "depth.txt" << endl;}int width = caprgb.get(cv::CAP_PROP_FRAME_WIDTH);int height = caprgb.get(cv::CAP_PROP_FRAME_HEIGHT);Mat imgC(height, width, CV_8UC3), imgDrgb(height, width, CV_8UC3), imgD(height, width, CV_16UC1), imgDt;while (1){caprgb >> imgC; // 读取可见光视频if (imgC.empty()){cout << "到达视频尾部,结束" << endl;break;}capdeprgb >> imgDrgb; // 读取深度可视化视频infile.read((char*)imgD.data, height * width * sizeof(unsigned short)); // 读取深度数据imgD.convertTo(imgDt, CV_8UC1, 0.05); // 深度数据灰度可视化imshow("Visible", imgC);imshow("DepthRGB", imgDrgb);imshow("DepthGray", imgDt);waitKey();}infile.close();caprgb.release(), capdeprgb.release();return 0;
}

3.2 相机内参信息

相机内参信息:

变量名 描述
width 图像像素宽度 1280
height 图像像素高度 720
fx 图像x方向的焦距 639.2278
fy 图像y方向的焦距 639.2278
ppx 图像主点(principal point)的水平坐标 640.4396
ppy 图像主点(principal point)的竖直坐标 335.2707

其余参数,比如畸变之类,均为0。下面给出内参的使用方法:
先定义一个相机内参结构体,这里的变量按照上面的方法定义即可,其中coeffs全为0。

typedef struct intrinsics
{int           width;     /**< Width of the image in pixels */int           height;    /**< Height of the image in pixels */float         ppx;       /**< Horizontal coordinate of the principal point of the image, as a pixel offset from the left edge */float         ppy;       /**< Vertical coordinate of the principal point of the image, as a pixel offset from the top edge */float         fx;        /**< Focal length of the image plane, as a multiple of pixel width */float         fy;        /**< Focal length of the image plane, as a multiple of pixel height */float         coeffs[5]; /**< Distortion coefficients, order: k1, k2, p1, p2, k3 */
} intrinsics;

下面给出一个函数,这个函数将图像上一个像素点映射到相机坐标系下的空间点。
intrin为相机内参,pixel为图像上的一个像素坐标,depth,为对应的深度,计算的空间点3D坐标存储在point中。

/* Given pixel coordinates and depth in an image with no distortion or inverse distortion coefficients,
compute the corresponding point in 3D space relative to the same camera */
void rs2_deproject_pixel_to_point(float point[3], const struct intrinsics * intrin, const float pixel[2], float depth)
{float x = (pixel[0] - intrin->ppx) / intrin->fx;float y = (pixel[1] - intrin->ppy) / intrin->fy;float r2 = x * x + y * y;float f = 1 + intrin->coeffs[0] * r2 + intrin->coeffs[1] * r2*r2 + intrin->coeffs[4] * r2*r2*r2;float ux = x * f + 2 * intrin->coeffs[2] * x*y + intrin->coeffs[3] * (r2 + 2 * x*x);float uy = y * f + 2 * intrin->coeffs[3] * x*y + intrin->coeffs[2] * (r2 + 2 * y*y);x = ux;y = uy;point[0] = depth * x;point[1] = depth * y;point[2] = depth;
}

4 FAQ

  • Q:数据视频是否对齐
    A:之前数据没有对齐,现在视频均已对齐。

对数据读写,图片对应有问题欢迎在评论区讨论,我会第一时间进行解答。

OpenCV实验(一):砖块的检测与位姿估计,窗户的检测与位姿估计相关推荐

  1. OpenCV实验(7):人脸面部识别

    文章目录 一. 实验要求 二. 实验思路 1. 想到啥说啥 2. 算法原理 3. 识别流程 4. 详细步骤 三. 实验效果 四. 实验代码 一. 实验要求 二. 实验思路 1. 想到啥说啥 这个实验叫 ...

  2. c++ opencv 通过网络连接工业相机_OpenCV项目实战之零件缺陷检测(上)

    导 语 在流水线上,上位机软件以一定的频率通过工业摄像机拍摄图片,然后检查图片中的零件质量,然后把零件质量用特定编码以串口通信方式发送给硬件,硬件收到信号后将有缺陷的零件过滤,以实现零件质量把控的目的 ...

  3. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  4. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  5. OpenCV 4.x 中请别再用HAAR级联检测器检测人脸!有更好更准的方法

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自OpenCV学堂. 引言 我写这篇文章是因为我很久以前写过一些文章,用了人脸检测,我当时用的都是HAAR级联检测器,导致最近几个人问我说这个H ...

  6. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测

    OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...

  7. python+OpenCV笔记(二十四):Shi-Tomasi角点检测

    Shi-Tomasi角点检测 原理 python+OpenCV笔记(二十二):角点检测原理(Harris角点检测原理.Shi-Tomasi角点检测原理)https://blog.csdn.net/qq ...

  8. 【OpenCV】OpenCV3的第二天——光流法(Optial Flow)运动目标检测

    基于特征点的跟踪算法大致可以分为两个步骤: 1)探测当前帧的特征点: 2)通过当前帧和下一帧灰度比较,估计当前帧特征点在下一帧的位置: 3)过滤位置不变的特征点,余下的点就是目标了. 特征点包括: 1 ...

  9. OpenCV实战之人脸美颜美型(三)——人脸关键点检测

    目录 前言 标注方式 4点/5点/6点标注 68点标注 人脸关键点评价指标 检测方法概述 使用OpenCV实现人脸关键点检测 Facemark API 基于LBF的人脸关键点检测 API调用 前言 人 ...

最新文章

  1. 虚拟机上安装 Red Hat Enterprise Linux 7 64位
  2. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线...
  3. Unix和Linux的区别和联系
  4. HipChat上传文件报未知错误解决方案
  5. Java Web——ResponseBean类DEMO
  6. Javascript中onmouseout与onmouseleave
  7. 使用Spring 框架能带来哪些好处?
  8. 小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力
  9. 打开储存在服务器的文件,云服务器储存文件
  10. 【三维深度学习】点云上采样网络PU-Net
  11. 什么才是Web前端开发的必备核心技能?
  12. linux中realplayer.rpm格式的软件安装,Linux_Linux中realplayer播放器安装步骤,Linux操作系统在安全性能上远 - phpStudy...
  13. 基于ASP的在线邮件收发系统研究设计
  14. TeamViewer远程连接
  15. 翻译《有关编程、重构及其他的终极问题?》——13.表格化的格式化
  16. 统计学中三大相关系数
  17. PLC编程实例及经验设计法详解
  18. flash设置屏保 html,用Flash制作屏保-FlashWiz
  19. mysql 多表联合视图_MySQL之单表、多表查询、连接、视图
  20. 【C语言】计算自由落体时间的小程序

热门文章

  1. python数据挖掘实验报告1
  2. python情话编程_用Python自动识别女友情绪,并自动分时段发情话
  3. 金融数据分析(一)python预热:字典排序、计算年增长率
  4. DEDECMS采集规则,过滤,替换文章内的部分内容
  5. python基于PHP+MySQL的汽车维修管理系统
  6. 走进小作坊(二十六)----平衡:工作和生活的艺术
  7. SRA-Toolkit安装
  8. 7-251 汉诺塔问题7-252 汉诺塔移动次数
  9. 奥村(Okumura)模型 matlab仿真
  10. MooseFS 分布式文件介绍+部署 MFS