【 Emgu CV教程】1.2、Emgu CV常用背景知识

友情提示,本篇文章仅适用于图像处理的业余选手,以及对OpenCV、Emgu CV无任何概念的读者,相关的背景知识仅用于图像分析和视觉处理的入门使用,如果您已经是专家或高手,勿喷。

有可能我解释的概念是错的,希望大家提出来相互提高。

这一篇主要针对最基础的概念理解,可能随时会更新... ...

1、什么是图像

在计算机中存储和显示的图像,都是数字化的。计算机处理数字化图像的最小单元是像素,百度百科中对像素的描述如下:

简单的说,像素包含位置信息和颜色信息。以一副640 * 360 大小的图片来说,就是图像长度方向有640个像素,高度方向有360个像素。位置信息就是这个像素点在图片中的哪个位置,因为每个位置实际显示的颜色,基本上是不相同的。而颜色信息就是这个像素点实际的颜色值。在Emgu CV中,最主要的颜色(或者说是图像的颜色空间),就是彩色图、灰度图。

       下面以这副640*360的高山湖泊图像为例进行解释。

1.1、彩色图像

Emgu CV中,最常用的是利用BGR颜色空间显示彩色图片。彩色图片是由三个通道组成,BGR颜色空间代表红色(R),绿色(G)和蓝色(B)三个通道,每个通道的值范围是[0,255],0是最小,255是最大。举例的高山湖泊图片结构如下所示:

左上角第一个像素点是天空蓝色,其三个通道的数值分别是P(0,0,蓝通道)=205,P(0,0,绿通道)=193,P(0,0,红通道)=159。而下图中绿圈内的点,坐标是(246,287),就是从左上角第一个像素点开始,第246列287行的位置,其值是P(246,287,蓝通道)=21,P(246,287,绿通道)=134,P(246,287,红通道)=255

       补充说明:

  • 纯蓝色图片,每个点的值都是P(蓝通道)=255,P(绿通道)=0,P(红通道)=0
  • 纯绿色图片,每个点的值都是P(蓝通道)=0,P(绿通道)=255,P(红通道)=0
  • 纯红色图片,每个点的值都是P(蓝通道)=0,P(绿通道)=0,P(红通道)=255
  • 纯白色图片,每个点的值都是P(蓝通道)=255,P(绿通道)=255,P(红通道)=255
  • 纯黑色图片,每个点的值都是P(蓝通道)=0,P(绿通道)=0,P(红通道)=0

1.2、灰度图

灰度图就是把BGR彩色图像的三个通道,合并成一个通道。合并后效果如下:

左上角第一个像素点P(0,0)=184,第246列287行的位置,值是P(246,287)=157。

2、Emgu CV像素坐标系

图像的水平方向为宽度,垂直方向为高度。表示位置的的时候用[长,宽]、或者[列,行]、或者[X,Y]。左上角第一个像素点是零点,可以记作P[0,0]。

3、Emgu CV的Mat类

Mat类是Emgu CV中用于存储图像数据的类型。刚才说的彩色图像、灰度图,都可以看成是一个640*360的矩阵,简单的理解:

Mat类把上面的彩色高山湖泊图像,以BGR颜色空间形式转换成了一个640列,360行的三个矩阵组,把灰度图转换成了一个640列,360行的矩阵。

Mat类的使用是Emgu CV最基础的和最常用的功能,一个mat对象包含了图像的尺寸、采用的颜色空间、数值存储类型等。Mat类的创建如下:

Mat mat=new Mat(); // 一个空Mat
Mat img = new Mat(new Size(360, 640), Emgu.CV.CvEnum.DepthType.Cv8U, 3); // 创建一个图片宽度是640,高度是360,8位的3通道图像
Mat img = new Mat(new Size(360, 640), Emgu.CV.CvEnum.DepthType.Cv8U, 1); // 创建一个图片宽度是640,高度是360,8位的单通道图像

注意:创建Mat时,格式是 Mat(rows, cols, DepthType type, channels),行(高度)在前,列(宽度)在后,这个和我们日常习惯是相反的,因为OpenCV就是这么写的。

4、Emgu CV的VideoCapture类

为了读取并显示视频,Emgu CV提供了VideoCapture类的相关方法,这些方法包括视频的初始化、检验视频初始化是否成功、读取视频基础信息、从视频中读取帧、关闭视频的方法等。这里先介绍初始化的三种类型:

// 1、打开本地视频
VideoCapture videoCapture1 = new VideoCapture("本地视频文件地址");

// 2、计算机上的摄像头
VideoCapture videoCapture2 = new VideoCapture(0); // 计算机上的第0个摄像头
VideoCapture videoCapture3 = new VideoCapture(3); // 计算机上的第3个摄像头

// 3、打开网络视频
VideoCapture videoCapture4 = new VideoCapture("网络视频地址");

原创不易,请勿抄袭。共同进步,相互学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值