opencv-4-成像系统与Mat图像颜色空间

目标

  1. 知道 opencv 处理图像数据的格式
  2. 介绍 mat 基础内容
  3. 知道 BGR 颜色 显示
  4. 颜色转换 BGR 到 灰度图像

开始

Opencv 主要是图像处理, 在进行图像处理的过程中有一个必须要解决的问题: 图像的内存存储, 最简单的方式就是使用二维数组来存储了. opencv 在1.0时代使用的是二维数组, 然后使用 IplImage 的指针指向数据起始的地址, 指针很强大, 但是对于新手不是很友好, 容易出现各种奇怪的问题…

opencv 从2.0 时代就开始使用 Mat 格式 来存储图像数据, 相当于从 C 版本的接口 升级到了 C++ 的接口, 到了后面就逐渐开始移除 C 接口了, 开始了 C++ 的接口, 不再需要自己去维护内存, 让它来做, 让我们不再去考虑太过底层的实现, 专注与我们自己的 算法实现上来…

VS2017 下面有一个插件 Image Watch, 可以在调试过程中查看 内存中的 opencv Mat 数据.

我们在VS 的调试过程中, 点击 视图--其他窗口--ImageWatch 会弹出窗口 我们能够看到图像的预览与实际, 点击可以使用滚轮进行放大, 比如

lena预览与眼睛部分放大

我们将其放大到一定程度就发现图像数据是一个一个的"格子", 也就是我们称为的像素,

对于我们原始的 lena 图像 就是一个 512 p x ∗ 512 p x 512px*512px 512px512px尺寸的图像

原始lena 图像

px 是 图像像素的单位, 可以理解为 512*512 个小格子

图像数据不是矢量数据, 不能够无限放大, 能够满足我们的日常实现即可

Mat 图像数据格式

一般来说, Mat 是一种对象, 有着相应的成员, 或者可以理解为属性, 可以理解为, 我们使用二维数组存储图像数据, 可以通过一些方法直接获取到这些二维数组的参数信息以及其他信息, 便于后续实现

lena_img 属性

比如 Mat类 常用的有以下几种1

  • type: CV_8UC3 图像数据类型和通道数目
  • depth: 图像的精度, 用于表示每一个像素每一个通道的精度值 8U 表示 无符号 2 8 2^8 28 精度, 最高256个灰度等级
  • channels: 通道数目 表示图像每个像素的数目
  • cols: 图像数据宽度 横向
  • rows: 图像数据高度 纵向
  • size(): 返回(cols, rows) 数据
  • data: 指向二维数组的首地址, 指向图像数据最开始的地方
  • step: = stride 表示图像数据每一行的字节大小

不再意义列举, 常用的就这么多

成像系统

数字成像系统概述 这篇文章中, 详细介绍了数字的成像系统2, 我们以这幅图为例

成像系统

成像系统 满足高斯公式 1 u + 1 v = 1 f \frac{1}{u} + \frac{1}{v} = \frac{1}{f} u1+v1=f1,

传感器成像

我们只看成像传感器部分, 传感器实际上是分为了每一个很小的格子, 每一个格子都会受到光照, 根据光照强度不同, 产生不同的电压信号, 通过放大电路被我们采集便能够得到整幅图像的电压, 转换以下辨识我们得到的图像数据了,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值