点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

图像

灰度图

灰度是描述灰度图像内容的最直接的视觉特征。它指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图像也称灰度图像。灰度图像矩阵元素的取值通常为[0,255],因此其数据类型一般为8位无符号整数,这就是人们通常所说的256级灰度。
灰度图:一个像素的灰度可以用8 位整数记录,也就是一个0~255的值。

深度图

当我们要记录的信息更多时,一个字节就不够了。
在RGB-D相机的深度图中,记录了各个像素与相机之间的距离。这个距离通常是以毫米为单位,而RGB-D 相机的量程通常在十几米左右,超过了255。
人们会采用16 位整数(C++ 中的unsigned short)来记录深度图的信息,也就是位于0~65535 的值。换算成米的话,最大可以表示65 米,足够RGB-D 相机使用了。

彩色图

彩色图像的表示则需要通道(channel)的概念。在计算机中,我们用红色、绿色和蓝色这三种颜色的组合来表达任意一种色彩。于是对于每一个像素,就要记录其R、G、B 三个数值,每一个数值就称为一个通道。例如,最常见的彩色图像有三个通道,每个通道都由8 位整数表示。在这种规定下,一个像素占据24 位空间。
通道的数量、顺序都是可以自由定义的。在OpenCV 的彩色图像中,通道的默认顺序是B、G、R。也就是说,当我们得到一个24 位的像素时,前8 位表示蓝色数值,中间8 位为绿色,最后8 位为红色。同理,亦可使用R、G、B 的顺序表示一个彩色图。如果还想表达图像的透明度,就使用R、G、B、A 四个通道。

RGB彩色图与灰度图之间的转换

彩色图像转换为灰度图像时,需要计算图像中每个像素有效的亮度值,其计算公式为:
Y = 0.299R + 0.578G + 0.114B

双目相机通过视差来计算深度。RGBD相机则可以主动测量每个像素的深度。

  1. 通过红外结构光(Structured Light)来测量像素距离的。例子有Kinect 1 代、Project Tango 1 代、Intel RealSense 等。

  2. 通过飞行时间法(Time-of-flight,ToF)原理测量像素距离的。例子有Kinect 2 代和一些现有的ToF 传感器等

RGBD相机原理图

深度图的保存

那么如何从RGBD相机提取像素的深度信息呢?
下面是一个简单的小程序,可以显示像素的深度信息.

#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
using namespace std;float depthscale = 1.0f/1000; //尺度因子,表示一个像素对应多少实际中的米
int main(int argc, char **argv)
{cv::Mat  depth = cv::imread("img.jpg");depth.convertTo(depth,CV_32FC1,depthscale); //这个转换很重要for (int v = 0; v < depth.rows; v++){for (int u = 0; u < depth.cols; u++) {unsigned int d = depth.ptr<unsigned short>(v)[u]; // 深度值if (d == 0)continue; // 为0表示没有测量到else{cout<<d<<"";if(v%50==0||u%50==0)cout<<endl;}}}return 0;
}

ConvertTo()函数

需要注意,其中的ConvertTo函数作用如下:
img: 图像数据来源,其类型为Mat。
注意: 不是所有格式的Mat型数据都能被使用保存为图片,目前OpenCV主要只支持单通道和3通道的图像,并且此时要求其深度为8bit和16bit无符号(即CV_16U),所以其他一些数据类型是不支持的,比如说float型等。如果Mat类型数据的深度和通道数不满足上面的要求,则需要使用convertTo()函数和cvtColor()函数来进行转换。
convertTo()函数负责转换数据类型不同的Mat,即可以将类似float型的Mat转换到imwrite()函数能够接受的类型。
而cvtColor()函数是负责转换不同通道的Mat,因为该函数的第4个参数就可以设置目的Mat数据的通道数(只是我们一般没有用到它,一般情况下这个函数是用来进行色彩空间转换的)。
另外也可以不用imwrite()函数来存图片数据,可以直接用通用的XML IO接口函数将数据存在XML或者YXML中。

具体含义,缩放并转换到另外一种数据类型:

  1. dst:目的矩阵;

  2. type:需要的输出矩阵类型,或者更明确的,是输出矩阵的深度,如果是负值(常用-1)则输出矩阵和输入矩阵类型相同;

  3. scale:比例因子;

  4. shift:将输入数组元素按比例缩放后添加的值;
    dst(i)=src(i)xscale+(shift,shift,...)

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

RGBD相机模型与图片处理相关推荐

  1. 几种相机模型:针孔相机模型、双目相机模型、RGB-D相机——SLAM学习笔记5

    几种相机模型:针孔相机模型.双目相机模型.RGB-D相机 针孔相机模型 双目相机模型 RGB-D相机模型 针孔相机模型 针孔相机是最简单的相机,很多相机也可以看作是针孔相机来进行处理.如图1所示,空间 ...

  2. 视觉SLAM_07_相机模型

    说明:转发请注明作者和出处:以下文章内容为精简版,详细版以pdf格式的幻灯片形式呈现,请见链接:视觉SLAM_07_相机模型.pdf 0.目录 0.目录 1.针孔相机模型 2.畸变模型 3.双目相机模 ...

  3. 视觉SLAM十四讲学习笔记-第五讲-相机模型

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  4. 相机模型和双目立体匹配完成一个基于KITTI立体相机采集图片的立体图像匹配程序,生成视差图像和3D点云图像

    机模型和双目立体匹配完成一个基于KITTI立体相机采集图片的立体图像匹配程序,生成视差图像和3D点云图像 一.针孔相机模型 二.双目相机模型 三.OpenCV实例实现用Pangolin生成视差图像和3 ...

  5. OpenCV——将针孔相机模型图片转换成鱼眼相机模型图片

    一 理论基础 关于针孔相机模型,参考博客: 关于鱼眼相机模型,参考参考文献[1][2]. 这里只需要知道我们这里使用的鱼眼相机模型是等距投影的鱼眼相机模型,即r=fθ(1),而针孔相机模型是透视投影, ...

  6. Udacity机器人软件工程师课程笔记(十九) - 3D感知介绍 - 主动/被动式传感器、RGB-D相机、点云

    3D感知介绍 目录 传感器 RGB-D相机 点云 1.传感器 主动式传感器是指向目标发射电磁波,然后收集从目标反射回来的电磁波信息的传感器,如合成孔径雷达等. 被动式传感器指只能收集地而目标反时来自太 ...

  7. ORB-SLAM2 特征点法SLAM 单目 双目 rgbd相机SLAM 单应/本质矩阵恢复运动 小图大图地图优化

    ORB-SLAM2 ORB特征点法SLAM 支持单目.双目.rgbd相机 安装测试 本文github链接 orbslam2 + imu ORB-SLAM是一个基于特征点的实时单目SLAM系统,在大规模 ...

  8. RGBD相机实用问题

    作者:玉林 编辑:3D视觉开发者社区 文章目录 1.深度图像格式和存储 2.查看16bit png格式深度图像的方法 3.相机模型 4.相机标定参数 5.内参的几何意义 6.图像裁剪或旋转后,内参如何 ...

  9. 【深度补全算法】基于RGBD相机的深度补全算法(非Lidar)论文与GitHub代码总结

    目录 前言 一.经典的深度补全算法(2018-2019) 1.Deep Depth Completion of a Single RGB-D Image 2.Indoor Depth Completi ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(五):QLoggingCategory管理、分类、过滤打印信息
  2. 8、MySQL表锁、行锁和页锁
  3. mvc 实例 php,来写一个简单的PHP MVC结构
  4. Python中的__new__()方法的使用
  5. uoj #118. 【UR #8】赴京赶考 水题
  6. Android实用代码七段(二)
  7. HBase之Region Compact流程分析
  8. Java日期操作工具类
  9. 数据库性能测试:sysbench用法详解
  10. 印度人为什么立刀切菜_印度人的刀功有多厉害?看到一刀刮掉的鱼鳞和碎洋葱,我彻底服了...
  11. 宇枫资本上班族理财的方法
  12. 【CityHunter】游戏进度总控,及需求设计
  13. 虚拟云服务器能调用本地摄像头,云服务器本地摄像头
  14. 用ClickHouse在GitHub上数星星
  15. 大招流的英雄没法子混了啊!----- dota 6.72新英雄
  16. 四轴自适应控制算法的一些尝试开源我的山猫飞控和梯度在线辨识自适应等算法—(转)...
  17. Gate 7.2的学习笔记(一)
  18. 浙大计算机学院考纲,浙江大学考研大纲
  19. 快速从入门到精通!mysql删除索引
  20. 常见的加密方法与破解思路

热门文章

  1. 你的神经网络不起作用的37个理由
  2. 中文repo“霸榜”GitHub Trending,国外开发者不开心了
  3. Google创始人公开信:AI暖春和黑暗面
  4. Siri不行了?微软小冰或许是未来的方向
  5. 陆奇激动地对世界说,百度就是中国的谷歌
  6. List 如何根据对象的属性去重?Java 8 轻松搞定!
  7. 笑出腹肌的注释,都是被代码耽误的诗人!
  8. 16 条 yyds 的代码规范
  9. 百度开源,分布式配置中心
  10. 面试官:说一下线程池内部工作原理?