1、数字图像处理数字图像处理Digital Image ProcessingDigital Image Processing目目 录录1.概论2.2.数字图像处理基础数字图像处理基础3.图像增强4.图像的几何变换5.频域处理6.数学形态学基础7.图像分割8.图像特征与理解第二章第二章 数字图像处理基础数字图像处理基础1.图像数字化技术2.色度学基础与颜色模型3.数字图像类型4.图像文件格式5.OpenCV编程简介2.1 图像图像数字化技术数字化技术n 图像的数字化包括采样采样和量化量化两部分。自然场景可用连续函数f(x,y)表示,其在空间坐标(自空间坐标(自变量)和颜色值变量)和颜色值(因变量因变
2、量)都是连续的都是连续的。为了在计算机上能够进行存储,须同时将空间坐标进行和颜色值进行离散化,这一过程称为数字化。空间坐标数字化的过程称为采样。颜色值数字化的过程称为量化。2.1 图像图像数字化技术数字化技术成像系统成像系统场景场景:模拟模拟图像图像成像平面成像平面数字化结果数字化结果数字化过程示意图2.1.1 采样采样n 采样采样是将在空间上连续的图像转换成离散的采样点(即像素)集的操作。由于图像是二维分布的信息,所以采样是在x轴和y轴两个方向上进行。采样示意图采样示意图2.1.2 量化量化(Sampling,Quantization)n 量化量化:取样后图像的每个样点的取值范围分成若干区间
3、,并仅用一个数值代表每个区间中的所有取值。量化的结果是图像能够容纳的颜色总数,它反映了采样的质量。连续灰度值连续灰度值 量化值量化值(整数值整数值)灰度标度 灰度量化 (a)量化 (b)量化为量化为8bit 量化示意图2.1.3 采样与量化参数的选择采样与量化参数的选择n 一幅图像在采样时,行、列的采样点行、列的采样点与量化时每个像素量化的级数级数,既影响数字图像的质量质量,也影响到数据量的大小大小。n 假定图像取M MN N个样点个样点,每个像素量化后的灰度二进制位数为Q Q,一般Q总是取为2的整数幂,即Q=2kQ=2k,则存储一幅数字图像所需的二进制位数二进制位数b b为为:b=MNQ 字
4、节数为:B=(MNQ)/8 (Byte)2.1.3 采样与量化参数的选择采样与量化参数的选择不同采样点数对图像质量的影响不同采样点数对图像质量的影响2.1.3 采样与量化参数的选择采样与量化参数的选择不同量化级数对图像质量的影响不同量化级数对图像质量的影响2.1.4 图像数字化设备图像数字化设备n 将模拟图像数字化为数字图像,目前主要有数码相机、扫描仪、数字化仪等设备。数码相机手机扫描仪医学成像人造卫星无人机2.1.4 图像数字化设备图像数字化设备n 图像数字化设备的组成组成(1)采样孔(2)图像扫描机构(3)光传感器(4)量化器(5)输出存储装置n 数字化设备性能设备性能(1)像素大小(2)
5、量化位数(3)图像大小(4)线性度(5)噪声2.2 色度学基础与颜色模型色度学基础与颜色模型n 颜色是通过眼、脑和生活经验所产生的一种对光的视觉效应对光的视觉效应,对色彩的辨认是肉眼受到电磁波辐射能刺激肉眼受到电磁波辐射能刺激后所引起的一种视觉神经视觉神经的感觉的感觉。可见光可见光:电磁波谱中波长约在0.390.76m范围内且为肉眼可见的电磁辐射。2.2.1 色度学基础色度学基础n 多光谱图像f(x,y,),计算机显示一幅彩色图像时,每一个像素的颜色是通过3种基本颜色(即红、绿、蓝)基本颜色(即红、绿、蓝)合成的,即最常见的RGB颜色模型。根据三原色学说,可见光谱内任何颜色都可由红、绿、蓝三色
6、组成。生理学试验表明,视网膜上的光感受器光感受器可分锥细胞锥细胞(cone cell)和杆杆细胞细胞(rod cell)。杆细胞杆细胞锥锥细细胞胞2.2.1 色度学基础色度学基础400020406080100450500550600650700波长(nm)光 吸 收 性%蓝绿红人类感光细胞的敏感曲线敏感曲线Red:700nm,Green:546.1nm,Blue:435.8nm2.2.1 色度学基础色度学基础n 颜色的三个属性三个属性颜色是外界光刺激于人的视觉器官而产生的主观感觉。颜色可分两大类:非彩色和彩色非彩色和彩色。n 非彩色:黑白色n 彩色:根据人的视觉系统感知彩色的方式,颜色有三个基
7、本属性,分别是色调、饱和度、亮度色调、饱和度、亮度。色调:人的感官对不同颜色的感受,如红色、绿色和蓝色。饱和度:颜色的纯度,饱和度越大,颜色看起来就会越鲜艳。强度:对应成像亮度和图像灰度,是颜色的明亮程度明亮程度。2.2.2 颜色模型颜色模型n 按用途可分为三类(1)计算计算颜色颜色模型模型用于进行颜色的理论研究。常见的RGBRGB模模型型、CIE XYZCIE XYZ模型模型、LabLab模型模型等均属于此类型。(2)视觉颜色模型视觉颜色模型是指与人眼对颜色感知的视觉模型相似的模型,它主要用于色彩的理解,常见的有HSIHSI模型模型、HSVHSV模型模型和 HSLHSL模型模型。(3)工业颜
8、色模型工业颜色模型侧重于实际应用,包括彩色显示系统、彩色传输系统 及电视传输系统等。如印刷中用的CMYKCMYK模模型型、电视系统用YUVYUV模型模型、用于彩色图像压缩的YCbCrYCbCr模模型型等。2.2.2 颜色模型颜色模型n RGB颜色模型按照CIE规定的三基色构成表色系统。自然界的任一种颜色都可通过这三种基色按不同比例混合而成不同比例混合而成。由于RGB模型将三基色同时加入以产生新的颜色,所以,它是一个加色系统一个加色系统。RGB (Red,Green,Blue)R:200 G:50B:1202.2.2 颜色模型颜色模型n RGB颜色模型的优点优点(1)RGB模型与显示器显示器等设
9、备有着较好的对应关系。(2)在RGB显示器中,有三种荧光粉三种荧光粉能够分别发出红、绿、蓝三种颜色,三个相邻的荧光点构成了一个像素,这些荧光点受到三束分别为c1,c2,c3的电子束的轰击,会发出不同的亮度,通过物理上的叠加或混合,便可显示出相应的颜色。2.2.2 颜色模型颜色模型n Lab颜色模型Lab颜色模型由三个要素组成,一个要素是亮度(亮度(L L),a a 和和b b是是两个颜色通道两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高(中亮度值)再到亮粉红色(高亮度值)亮度值);b是从亮蓝色(低亮度值)到灰色(中亮度值)再到。因此,
10、这种颜色混合后将产生具有明亮效果的色彩。2.2.2 颜色模型颜色模型n HSI 颜色模型色调H(Hue):与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,饱和度(Saturation):表示颜色的纯度,纯光谱色是完合饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会鲜艳,反之亦然。强度I(Intensity):对应成像亮度和图像灰度,是颜色的明亮程度。HSI模型建立基于两个重要的事实:(1)I I分量与图像的彩色信息无关分量与图像的彩色信息无关;(2)H H和和S S分量与人感受颜色的方式是紧密相联的分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适
11、合彩色特性检测与分析。2.2.2 颜色模型颜色模型n HSI 颜色模型RGB颜色模型转换为HSI颜色模型的公式见教材22页 HSI色立体圆柱HSI模型2.2.2 颜色模型颜色模型n CMY模型和CMYK模型CMY模型是硬拷贝设备上输出图像的颜色模型,常用于彩色打印、印刷行业。它的三原色是青(Cyan)、品红(Magenta)、,分别为红、绿、蓝的补色,称为减色基。在CMY中,颜色是从白光中减去一定成分白光中减去一定成分得到的,而不是像素RGB颜色模型那样,在黑光中增加某种颜色黑光中增加某种颜色。CMY坐标可以从RGB模型中得到:1255,0,0025525510,255,0255025510,
12、0,2552552550CRMGYB 2.2.2 颜色模型颜色模型n CMY模型和CMYK模型由于在印刷时CMY模型不可能产生真正的黑色,因此在印刷业中实际上使用的是CMYK颜色模型,K K为第四种颜色为第四种颜色,表示黑色。用以弥补三个颜色混合不够黑的问题。2.2.2 颜色模型颜色模型n YCbCr模型YCbCr模型充分考虑人眼视觉特性,以降低彩色数字图像存储量,是一种适合于彩色图像压缩的模型彩色图像压缩的模型。YCbCr模型与YUV模型一样,由亮度Y、色差Cb、色差Cr构成。与YUV模型的不同是,在构造色差信号时,充分考虑了RGB 3个分量在视觉感受中的不同重要性。2.2.3 颜色变换颜色
13、变换n 对彩色图像进行颜色变换,可实现对彩色图像的增强处理,改善其视觉效视觉效果果,为进一步处理奠定基础。n 基本变换颜色变换模型为:g(x,y)=T f(x,y)式中:f(x,y)是彩色输入图像,其值为一般为向量;g(x,y)是变换或处理后的彩色图像,与f(x,y)同维;T是在空间域上对f的操作。T对图像颜色的操作有多种方式;2.2.3 颜色变换颜色变换n 基本变换nirrrTsnii,2,1,21式中:ri、si为f(x,y)和g(x,y)在图像中任一点的彩色分量值;T1,T2,Tn为变换函数集。n的值由颜色模型而定,若选择RGB模型,则n=3;r1、r2、r3分别表示输入图像的红、绿、蓝
14、分量;选择CMYK模型,则n=4。(a)原图像 (b)HSI模型 (c)RGB模型 彩色图像直方图均衡化处理效果2.2.3 颜色变换颜色变换n 彩色切片彩色切片是通过识别图像中感兴趣的颜色,然后将其作为一个整体从图像中分离出来。彩色切片效果(a)原图像n1,2,i25.01其它injjiirWars(b)提取黄色n1,2,i)(5.01202其它injjiirRars2.3 数字图像类型数字图像类型n 矢量矢量(Vector)(Vector)图图和位图(位图(BitmapBitmap),),位图也称为栅格图像。n 矢量图是用数学数学(准确地说是几何学)公式描述一幅图像公式描述一幅图像。(计算机
15、图形计算机图形学学)优点优点:一是它的文件数据量很小,因为存储的是其数学公式;其二是图像质量与分辨率无关图像质量与分辨率无关,这意味着无论将图像放大或缩小了多少次,图像总是以显示设备允许的最大清晰度显示。缺点缺点,就是不易制作色调丰富或色彩变化太多的图像色调丰富或色彩变化太多的图像,而且绘制出来的图像不是很逼真,同时也不易在不同的软件间交换文件。在CorelDraw和Adobe Illustrator中生成的图像均为矢量图。2.3 数字图像类型数字图像类型n 位图位图是由许多像素点来表示一幅图像是由许多像素点来表示一幅图像。每个像素具有颜色属性和位置属性。线画稿线画稿:黑白二色01110000
16、1I2.3 数字图像类型数字图像类型n位图是由许多像素点来表示一幅图像。每个像素具有颜色属性和位置属性灰度图像灰度图像:灰度图像像素的灰度级用8 bit表示,每个像素都是介于黑、白之间的256(28=256)种灰度中的一种。100220250180501202001500I2.3 数字图像类型数字图像类型真彩色图像真彩色图像:真彩色图像中,每一个像素由红、绿和蓝3个字节组成,每个字节为8 bit,表示0到255之间的不同的亮度值,这3个字节组合,可以产生1670万种不同的颜色。00255800255240240255R02550160255255801600G25525525524000160
17、800B2.3 数字图像类型数字图像类型索引图像:在这种模式下,预先定义好每种颜色,且可供选用的一组预先定义好每种颜色,且可供选用的一组颜色数最多为颜色数最多为256256种种。2.3 数字图像类型数字图像类型多多(高高)光谱图像光谱图像:每一个像素点的值是一个多维向量多维向量,是该点在多个波段的反射值反射值。http:/ 数字图像类型数字图像类型n 位图有关术语(1)像素点(Pixel)、点Dot和样点(Sample)像素:图像的每个点称为Pixel 样点:数字化设备从源图像中每英寸取多少个样点,dpi(dot per inch)点:从样点区域中选一个点作为该样点的颜色值(2)分辨率 图像分
18、辨率 屏幕分辨率 打印机分辨率 扫描仪分辨率2.4 图像文件格式图像文件格式n 数字图像有多种存储格式多种存储格式,每种格式一般由不同的软件公司开发所支持。n 文件一般包含文件头和图像数据文件头和图像数据。就像每本书都有封面,目录,它们的作用类似于文件头,通过文件头我们可读取图像数据。n 文件头的内容由该图像文件的公司决定,一般包括文件类型、文件制作者、制作时间、版本号、文件大小等内容,还有压缩方式。常见的图像(视频)文件格式2.4.1 BMP图像文件格式图像文件格式n BMP图像文件的结构可以分为如下三个部分:(1)文件头文件头(由位图文件位图文件和位图信息头位图信息头两部分组成),(2)调
19、色板数据调色板数据,(3)图像数据图像数据。n BMP文件头的长度为固定值54个字节,其中Bitmapfileheader结构14字节Bitmapinfoheader结构40字节2.4.1 BMP图像文件格式图像文件格式BMP图像文件结构2.4.1 BMP图像文件格式图像文件格式n BITMAPFILEHEADER包含文件类型和大小等信息,定义为:typedef struct tagBITMAPFILEHEADER WORD bfType;/*代表BMP格式,必为“BM”即“0 x4d42”*/DWORD bfSize;/*BMP文件总字节数*/WORD bfReserved1;/*预留,必为
20、0*/WORD bfReserved2;/*预留,必为0*/DWORD bfOffBits;/*以字节为单位,表示图像数据在文件内的起始地址,即图像数据针对文件头的偏移量*/BITMAPFILEHEADER 2.4.1 BMP图像文件格式图像文件格式n BITMAPINFOHEADER包含位图的尺寸和颜色格式等信息,其定义如下:typedef struct tagBITMAPINFOHEADERDWORD biSize;/*bitmapinfo结构的字节数为40*/LONGbiWidth;/*图像宽度(像素数)*/LONG biHeight;/*图像高度(像素数)*/WORDbiPlanes;
21、/*目标设备平面数,总为1*/WORDbiBitCount;/*每像素位数,可为1、4、8或24*/*数据压缩方式,为0(不压缩);1(BI_RLE8)或2(BI_RLE4)*/DWORD biCompression;DWORD biSizeImage;/位图的大小,以字节表示*/LONGbiXPelsPerMeter;/*设备水平分辨率,以每米像素数为单位*/LONGbiYPelsPerMeter;/*设备垂直分辨率,以每米像素数为单位*/DWORD biClrUsed;/*位图使用的颜色数,0表示所有颜色都使用*/DWORD biClrImportant;/*重要的颜色索引,0表示所有颜色
22、均重要*/BITMAPINFOHEADER2.4.1 BMP图像文件格式图像文件格式n 调色板(Palette)调色板仅供灰度图像或索引图像使用,真彩色图像并不需要调色板,位图信息头部分后直接是位图数据。调色板实际上是一个数组,共有biClrUsed个元素(如果该值为零,则有2的biBitCount次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节。结构如下:typedef struct tagRGBQUADBYTErgbBlue;BYTErgbGreen;BYTErgbRed;BYTErgbReserved;RGBQUAD;2.4.1 BMP图像文件格式图像文件格式n 图
23、像数据对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图像,图像数据就是实际的R、G、B值。需特别注意2点:(1)图像数据每一行的字节数必须是图像数据每一行的字节数必须是4的整倍数,否则需要补齐。的整倍数,否则需要补齐。(2)BMP文件的数据存放是从下到上,从左到右。文件的数据存放是从下到上,从左到右。也就是说,图像数据是倒置的,读取BMP文件时,先读取最下面的数据,然后依次从下往上读取数据。DIB(Device Independent Bitmap)图像格式是设备无关位图文件,描述图像的能力基本与BMP相同,并且能运行于多种硬件平台,只是文件较大。2.4.2 其它图
24、像文件格式其它图像文件格式n TIF标记图像文件格式TIF(Tag Image File Format)提供存储各种信息的完备手存储各种信息的完备手段段,可以存储专门的信息而不违反格式宗旨,是目前流行的图像文件交换标准之一。TIF文件格式是图像文件格式中最复杂的一种,要求用更多的代码来控制它,会导致文件读写速度慢文件读写速度慢。TIF文件由文件头、参数指针表与参数域、参数数据表和图像数据文件头、参数指针表与参数域、参数数据表和图像数据4部分组成。2.4.2 其它图像文件格式其它图像文件格式n GIFCompuServe开发的图形交换文件格式GIF(Graphics Interchange Fo
25、rmat),可在不同的系统平台上交流和传输。GIF图像文件采取LZW压缩算法,存储效率高,支持多幅图像定序或覆盖,交错多屏幕绘图以及文本覆盖。GIF主要是为数据流而设计的一种传输格式。GIF有5个主要部分以固定顺序出现,所有部分均由一个或多个块(block)组成。2.4.2 其它图像文件格式其它图像文件格式n PBM、PGM、PPM文件PBM(Portable BitMap)、PGM(Portable GreyMap)、PPM(Portable PixMap)是可交换式位图(灰度、像素)映射文件格式,通常作为各种图像格式文件之间的转换平台。PBM、PGM、PPM和BMP文件一样,图像数据均不压
26、缩,但前者的文件头信息非常简单。文件头以ASCII方式编码,图像数据以ASCII码或字节形式编码。文件头包含3部分信息,第1项是格式标识符(Magic Identifier),表示图像的类型及存储格式;第2至第4项分别为图像的宽度和高度、图像颜色可能的最大值和注释。文件头之后为图像数据。2.4.2 其它图像文件格式其它图像文件格式n PCX文件PCX文件格式由ZSoft公司设计。各种扫描仪扫描得到的图像均能保存成PCX格式。PCX支持256种颜色,不如TIF等格式功能强,但结构较简单,存取速度快,压缩比适中,适合于一般软件的使用。PCX 格式支持RGB、索引颜色、灰度和位图颜色模式,但不支持
27、alpha 通道。PCX 支持 RLE 压缩方法,图像颜色位数可为 1、4、8 或 24。PCX图像文件由3个部分组成:文件头、图像数据和256色调色板。PCX的文件头有128个字节,它包括版本号,被打印或扫描图像的分辨率(dpi),大小(单位为像素),每扫描行的字节数,每像素包含的位数据和彩色平面数。位图数据用行程长度压缩算法(RLE)记录数据。2.4.2 其它图像文件格式其它图像文件格式n JPEG图像格式JPEG(Joint Photographers Experts Group,联合图像专家组,联合图像专家组)格式格式,是由ISO和CCITT为静态图像所建立的第一个国际数字图像压缩标准
28、。由于JPEG的高压缩比和良好的图像质量,被广泛应用于多媒体和网络程序中广泛应用于多媒体和网络程序中。JPEG和GIF成为HTML语法选用的图像格式。JPEG 格式支持 24 位颜色,并保留照片和其它连续色调图像中存在的亮度和色相的显著和细微变化。JPEG一般基于DCT变换的顺序型模式压缩图像变换的顺序型模式压缩图像。JPEG 通过有选择地减少数据来压缩文件大小。因为它会弃用数据,故 JPEG 压缩为有损压缩。2.5 OpenCV编程简介编程简介n OpenCVOpenCV(Open Source Computer Vision Library)是一个开源、跨平台的计算机视觉库,可以运行在Li
29、nux、Windows和Mac OS桌面操作平台或Android和iOS移动操作平台上。提供了C+、C和Java接口,采用优化的C/C+编写,实现了图像处理和计算机视觉2500种优化后的通用算法。2.5 OpenCV编程简介编程简介n 数字图像处理的主要编程工具(1)Matlab(2)Python(3)Visual Studio C+2.5 OpenCV编程简介编程简介n Matlab:Matrix Laboratory 以矩阵(数组)为基本处理单元,非常适合图像处理,但效率较低,研究领域应用较多。2.5 OpenCV编程简介编程简介n Python:一种面向对象的解释型面向对象的解释型计算机
30、程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。n Python是纯粹的自由软件纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议2 。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。n IEEE发布2017年编程语言排行榜:PythonPython高居首高居首位位 。2.5 OpenCV编程简介编程简介n C+:面向对象编程,效率高,执行速度快,但对编程能力要求较高。n OpenCV计算机视库的推出,极大降低了图像处理的门槛,促进
31、了图像处理的实际应用。2.5 OpenCV编程简介编程简介n openCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。2.5.1 OpenCV简介简介n OpenCV的第一个预览版本于2000年在IEEE Conference on Computer Vision and Pattern Recognition公开,并且后续提供了5个测试版本。n 2006年发布1.0版n 2009年10月发布OpenCV2.0第二个主要版本,主要的更新是增加了C+接口并对接口并对现有实现进行了优化(特别是多核心特征),现有实现进行了优化(特别是多核
32、心特征),提供了使用更容易、类型更安全的新函数。目前最新版本是OpenCV2.4.8。n 2012年8月,OpenCV由一个非盈利性组织(OpenCV.org)来维护,并保留了一个开发者网站(http:/code.opencv.org)和用户网站(http:/opencv.org)。n OpenCV的内建模块功能强大且灵活多样,这些模块能够解决计算机视觉系统中的大多数问题。可以实现人机互动、物体识别、图象分割、人脸识别、动作识别、运动跟踪、机器人视觉、运动分析、机器视觉、结构分析等各种应用领域的需求。OpenCV提供了合理的编程架构、内存管理及GPU支持。2.5.1 OpenCV简介简介n 图
33、像图像数据在计算机中表示为数据在计算机中表示为二维二维(灰(灰度图像)或度图像)或三维三维矩阵(数组)矩阵(数组)(彩色图(彩色图像,像,多光谱图像多光谱图像和和高光谱图像)高光谱图像)n 图像处理中,以图像处理中,以矩阵矩阵为处理对象的操为处理对象的操作非常多。因此,设计以向量、作非常多。因此,设计以向量、矩阵矩阵(Mat)类为核心和)类为核心和多个计算机视觉应多个计算机视觉应用类和算法库用类和算法库 非常必要。非常必要。2.5.1 OpenCV简介简介n图像数涉及到的一些运算有:图像数涉及到的一些运算有:(1)图像加减法图像加减法 I1+I2,I1-I2;(2)图像矩阵点乘图像矩阵点乘 I
34、1.*I2(3)图像矩阵相乘图像矩阵相乘 I1*I2(4)图像中像素的运算图像中像素的运算 v1(r,g,b),向量的内积、,向量的内积、向量的模、向量的代数运算向量的模、向量的代数运算(5)图像的直方图,特征提取均体现为向量或图像的直方图,特征提取均体现为向量或矩阵矩阵 2.5.1 OpenCV简介简介OpenCV提供的内建模块2.5.3 OpenCV数据结构数据结构n 在OpenCV2中设计并定义了大量的基本数据结构,主要采用类模板类模板来实现。2维点维点Point_:2维点Point_类模板定义了公有数据成员x和y,重载了+、-、=、!=4个基本的操作,还定义了点乘、叉乘等操作。特别的这
35、个类还提供了inside函数来判断一个点是否在矩形区域内。为了方便使用,OpenCV又对常用的类型进行了类型重定义:typedef Point_ Point2i;typedef Point2i Point;typedef Point_ Point2f;typedef Point_ Point2d;2.5.3 OpenCV数据结构数据结构 2维点Point_#include#include using namespace std;using namespace cv;int main()Point2f a(0.3f,0.f),b(0.f,0.4f);Point pt=(a+b)*10.f;cou
36、t pt.x ,pt.y endl;return 0;输出的结果:3,42.5.3 OpenCV数据结构数据结构 3维点Point3_ 类似于2维点,OpenCV同时提供了Point3_类模板,只不过它是一个3维点(x,y,z)。它的常用类型是:typedef Point3_ Point3i;typedef Point3_ Point3f;typedef Point3_ Point3d;2.5.3 OpenCV数据结构数据结构 尺寸Size_类模板Size能够访问的成员变量是height和width。还定义了area函数来求面积。其他的操作基本都是类型转化函数。它的常用类型是:typedef
37、Size_ Size2i;typedef Size2i Size;typedef Size_ Size2f2.5.3 OpenCV数据结构数据结构 矩形Rect_类模板矩形区域(x,y,width,height),(x,y)左上角坐标,范围x,x+width),y,y+height)。rect=rect point/矩形偏移rect=rect size/改变大小rect+=point,rect-=point,rect+=size,rect-=sizerect=rect1&rect2/矩形交集rect=rect1|rect2/包含rect1 rect2的最小矩形rect&=rect1,rect|
38、=rect1rect=rect1,rect!=rect12.5.3 OpenCV数据结构数据结构 旋转矩形RotatedRect类除了基本的矩形之外,OpenCV还提供了一个可以旋转的矩形RotatedRect,它是由中心、变长、旋转角度决定的。可以访问它的这三个成员,也可以使用points函数返回它的4个顶点,使用boundingRect求出它的外接矩形(非旋转)。RotatedRect rRect=RotatedRect(Point2f(100,100),Size2f(100,50),30);2.5.3 OpenCV数据结构数据结构 小矩阵Matx类模板用来记录一些小的矩形。这些矩形在编译
39、前大小就固定了:typedef Matx Matx12f;typedef Matx Matx12d;.typedef Matx Matx16f;typedef Matx Matx16d;typedef Matx Matx21f;typedef Matx Matx21d;.typedef Matx Matx61f;typedef Matx Matx61d;typedef Matx Matx22f;typedef Matx Matx22d;.typedef Matx Matx66f;typedef Matx Matx66d;如:Matx33f m(1,2,3,4,5,6,7,8,9);2.5.3
40、OpenCV数据结构数据结构 短向量Vec类模板typedef Vec Vec2b;typedef Vec Vec3b;typedef Vec Vec4b;typedef Vec Vec2s;typedef Vec Vec3s;typedef Vec Vec4s;typedef Vec Vec2i;typedef Vec Vec3i;typedef Vec Vec4i;typedef Vec Vec2f;typedef Vec Vec3f;typedef Vec Vec4f;typedef Vec Vec6f;typedef Vec Vec2d;typedef Vec Vec3d;typede
41、f Vec Vec4d;typedef Vec Vec6d;它支持加、减、数乘、相等、不等、求范数等运算。2.5.3 OpenCV数据结构数据结构 四维向量Scalar_类模板Scalar_类其实是用Vec派生下来的,也就是说,它是一个4元组:typedef Scalar_ Scalar;他通常用来传递像素。Range类Range类用来指定连续的子序列,比如矩阵的一部分。2.5.3 OpenCV数据结构数据结构 Matcv:Mat类是用于保存其它n维数组,主要用于保存图像数据图像数据,默认情况下,定义cv:Mat类对象时,其大小为00。当然,也可以给其构造函数提供合适的实参,以定义需要的数据。
42、如:cv:Mat ima(240,320,CV_8U,cv:Scalar(100);其中,CV_8U表示每个图像像素用1字节表示,U表示无符号。也可以用S表示有符号数。对于彩色图像,应该使用3个通道用表示CV_8UC3。也可以是16位或32位整型CV_8SC3。也可以是32位或64位浮点数CV_32F。2.5.3 OpenCV数据结构数据结构 Mat创建cv:Mat类对象2.5.3 OpenCV数据结构数据结构 Mat访问cv:Mat类对象的元素2.5.3 OpenCV数据结构数据结构 Matcv:Mat类对象的表达式2.5.4 读入、显示和存储图像读入、显示和存储图像n 读图像的源程序#in
43、clude /支持标准的输入输出支持标准的输入输出#include /openCV核心模块核心模块#include /支持简单的界面支持简单的界面using namespace std;/命名空间命名空间stdusing namespace cv;/命名空间命名空间cvint main()Mat image,result;/创建创建2个对象个对象 cout size:image.size().height ,image.size().width endl;image=imread(tiger.jpg);if(!image.data)cout read image file fail!endl;
44、namedWindow(Original Image);imshow(Original Image,image);flip(image,result,1);/水平翻转图像水平翻转图像 namedWindow(Output Image);imshow(Output Image,result);imwrite(output.bmp,result);waitKey(0);return 0;2.5.5 操作图像像素操作图像像素n atat方法方法 cv:Mat提供了一个at(int y,int x)函数模板函数模板以操作指定位置的矩阵元素,在使用时需要指定函数返回的数据类型,image.at(j,i)
45、=255;image.at(j,i)channel=value;2.5.5 操作图像像素操作图像像素n 迭代迭代器器 类似于STL库的用法,OpenCV可以采用迭代器采用迭代器实现像素的操作。同样,在使用迭代器时需要指定返回的数据类型,如:cv:MatIterator_ it;/将Mat对象看作是容器 cv:Mat_:iterator it;2.5.5 操作图像像素操作图像像素n 使用指针 cv:Mat提供了一个ptr(int i)函数模板函数模板以获取指定行数据的首地址。利用这一地址即可实现像素的操作。同样,在使用ptr(int i)函数时需要指定返回的数据类型,如:image.ptr(i)
46、;n 整行整列像素值的赋值 对于整行或者整列的数据,可以考虑这种方式处理:img.row(i).setTo(Scalar(255);img.col(j).setTo(Scalar(255);2.5.6 图形交互和媒体接口图形交互和媒体接口HighGUIn OpenCV提供了功能强大的UI接口,可以在MFC、Qt、WinForms、Cocoa等平台下使用。新版本的HighGUI接口包括:(1)创建并控制窗口,用于显示图片并记录其内容;(2)为窗口添加了滑杆控件(trackbars控件),可以方便利用鼠标进行控制;(3)读写硬盘和内存的图片;(4)读取摄像头的视频、读写视频文件。习题习题n 熟悉并理解openCV对图像的主要操作。n 编程实现对一幅图像采样与量化,并分析结果。n 编程实现对一幅图像的各种颜色模型转换。