数字图像视频处理技术 (2).ppt

上传人:本田雅阁 文档编号:2991244 上传时间:2019-06-21 格式:PPT 页数:156 大小:6.66MB
返回 下载 相关 举报
数字图像视频处理技术 (2).ppt_第1页
第1页 / 共156页
数字图像视频处理技术 (2).ppt_第2页
第2页 / 共156页
数字图像视频处理技术 (2).ppt_第3页
第3页 / 共156页
数字图像视频处理技术 (2).ppt_第4页
第4页 / 共156页
数字图像视频处理技术 (2).ppt_第5页
第5页 / 共156页
点击查看更多>>
资源描述

《数字图像视频处理技术 (2).ppt》由会员分享,可在线阅读,更多相关《数字图像视频处理技术 (2).ppt(156页珍藏版)》请在三一文库上搜索。

1、图像/视频处理技术,注:本讲内容参考了五邑大学李鹤喜数字图像技术讲义和北京大学数字媒体研究所数字媒体技术基础课件,数字媒体技术基础第三讲(8课时),教学目标,了解数字图像/视频处理的基本概念和基本方法 掌握目前最常用的数字图像/视频处理开发包-OpenCV,了解如何用OpenCV开发基本的数字图像/视频处理程序,2/155,教学内容,第一部分:基本概念和操作 图像像素间联系 图像的基本统计特性直方图 基本图像处理技术点运算、二值图像形态学操作、连通分量分析 第二部分: OpenCV OpenCV概述 基础结构与操作 基本OpenCV程序与示例,3/155,第一部分:基本概念和操作,4/155,

2、像素的邻域,(1)p的4邻域 坐标为(x,y)的像素p有4个水平和垂直的相邻像素,坐标分别为: (x+1, y), (x-1, y), (x, y+1), (x, y-1),这个像素集称为p的4邻域,用N4(p)表示。,5/155,像素的邻域,(2)p的4个对角邻像素 坐标分别为: (x+1, y+1), (x-1, y-1), (x-1, y+1), (x-1, y-1),用N D(p)表示。 (3)p的8邻域 N4(p)+ N D(p) 。,6/155,1、像素的邻接 如果接触则邻接。邻接仅考虑了像素间的空间关系。 如一个像素和在它邻域中的像素是接触的,所以是邻接的,2、像素的连接,两个像

3、素的连接,则需满足: 它们在空间上是接触的(即它们是邻接的) 它们的灰度值(或者其他属性值)满足某个特定的相似准则(如它们的灰度值相等),像素间的邻接、连接和连通,7/155,设V表示定义连接的灰度值的集合,4连接:2个像素p和r在V中取值,且r在N4(p)中,8连接:2个像素p和r在V中取值,且r在N8(p)中,m连接(混合连接): 2个像素p和r在V中取值,且满足下列条件之一: r在N4(p)中 r在ND(p)中 且 N4(p) N4(r)不包含V中取值的像素,8/155,r不在N4(p)中,r在ND(p)中, N4(p)中包括标有 a,b,c,d四个像素, N4(r)中包括标有 c,d,

4、e,f 四个像素, 且 N4(p) N4(r)包括标有c,d的两个像素,设V 1 ,满足条件二,不满足条件二,9,混合连接的实质: 在像素之间同时存在4连接和8连接时,优先采用4连接,并屏蔽两个和同一像素间存在4连接的像素之间的8连接。,混合连接是8连接的变型,引进它是为了消除使用8连接时出现的多路问题。,设V,中心像素与8邻域像素连接关系如图b所示,由于8连接产生歧义性(中心与右上角像素有两条通路),用m连接消除,中心像素与右上角像素之间直接的m-连接不能成立,所以线路如图c所示。,10,两像素间的通路:,如果这条通路上的所有像素的灰度值均满足某个特定的相似准则,则说明两个像素p和q是连通的

5、。根据所采用的邻接定义的不同得到不同的连通。如4连通,8连通,像素的连接是像素连通的一种特例。n=1时,两个连通的像素也是连接的。,像素的连通,11,随堂练习: 以下p-q通路各是什么通路?,12,图像的子集合:图像中的一部分,根据像素间的联系,可将图像中某些像素结合组成图像的子集合。,图像子集的连接:如果S中的一个或一些像素与T中的一个或一些像素连接,则两个图像子集S和T是连接的 要考虑:是否是邻接子集,它们中邻接像素的灰度值是否满足某个特定的相似准则,图像子集的邻接: 如果图像子集S中的一个或一些像素与图像子集T中的一个或一些像素邻接,则两个图像子集S和T是邻接的。根据所采用的像素邻接定义

6、,可得到图像子集4邻接或8邻接,像素集合的邻接和连通,13/155,设p和q是一个图像子集S中的两个像素,如果存在一条完全由在S中的像素组成的从p到q的通路,那么就称p在S中与q相连通 对S中任一像素p,所有与p相连通且又在S 中的像素的集合(包括p)合起来称为S中的一个连通分量。 如果S中只有一个连通组元,即S中所有像素都互相连通,则称S是一个连通集。 两个互不邻接但与同一图像子集都邻接(在同一个V下)的图像子集是互相连通的。 图像中同一个连通集中的任两个像素互相连通,而不同连通集中的像素互不连通。,14/155,连通区域分析(Connected Component Analysis),CV

7、PR和图像分析处理的众多应用领域中较为常用和基本的方法。 例如:OCR识别中字符分割提取(车牌识别、文本识别、字幕识别等)、 视觉跟踪中的运动前景目标分割与提取(行人入侵检测、遗留物体检测、基于视觉的车辆检测与跟踪等)、 医学图像处理(感兴趣目标区域提取)、等等。 也就是说,在需要将前景目标提取出来以便后续进行处理的应用场景中都能够用到连通区域分析方法,通常连通区域分析处理的对象是一张二值化后的图像。,15/155,像素之间的联系与像素在空间的接近程度有关。像素在空间的接近程度可用像素之间的距离来测量。 距离量度函数:用来测量距离,三个条件,(1)表明两像素之间的距离总是正的(两像素空间位置相

8、同时,其间的距离为0)(2)表明两像素之间的距离与起终点的选择无关。或者说距离是相对的。(3)表明两像素之间的最短距离是沿直线的。,图像间的距离,16,在数字图像中的距离量度函数:两个像素p和q,坐标(x , y), (s , t ),欧氏距离(范数/模为2的距离): 与坐标为(x , y)的像素的欧氏距离小于或等于某个值d的像素都包括在以(x ,y )为中心以d为半径的圆中。在数字图像中圆只能近似表示。,城区距离(范数/模为1的距离):D4距离 与坐标为(x , y)的像素的城区距离小于或等于某个值d的像素组成以(x ,y )为中心的菱形。,17,D8=1的像素就是(x , y )的8近邻像

9、素,所以像素p的8邻域可定义为:,棋盘距离(范数为的距离): 与坐标为(x , y)的像素的棋盘距离小于或等于某个值d的像素组成以(x ,y )为中心的正方形。,D4=1的像素就是(x , y )的4近邻像素,所以像素p的4邻域可定义为:,18,图像的基本统计特性直方图,直方图(Histogram):表达一幅图像的灰度级(或颜色)分布情况的统计表 横坐标:灰度(或颜色量化值) 纵坐标:某一灰度值(或颜色量化值)的像素个数 直方图的性质 丢失空间信息 一个图像有唯一的直方图,但一个直 方图可能对应多幅图像 一幅图像各区域的直方图之和等于全 图的直方图 直方图的用途 数字化参数:用于判断一幅图像是

10、否 合理利用了所有可选的灰度级范围 边界阈值选取:若灰度直方图具有较 好的二峰性,则可以方便进行二值化,19/155,图像的基本统计特性直方图,直方图的计算:对(M,N)大小的图像,设灰度(颜色)级为L: 初始化:histk=0, k=0,L-1 统计:histf(x,y)+; x,y=0,M-1,0, N-1 归一化:histf(x,y) /=M*N,20/155,基本图像处理技术图像的点运算,代数运算 图像的代数运算是指对两幅图像进行点对点的四则运算而得到一幅新的输出图像。图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需要的算术操作,还能为许多复杂的图像处理提供准备 1.

11、加法运算 2. 减法运算(差分),21/155,图像的点运算,+,=,22/155,图像的点运算,=,图像求差可以消除背景,23/155,图像的点运算,(a)原图,(b)梯度运算(相邻2个像素 间做差),24/155,基本图像处理技术-形态学操作,集合论基础知识 膨胀和腐蚀(Dilation & Erosion):产生滤波器作用 开操作和闭操作(Opening & Closing):产生滤波器作用 形态学操作在图像处理中的应用 边界提取 区域填充 连通分量的提取 凸壳,细化,粗化,25/155,图像形态学,形态学:一般指生物学中研究动物和植物结构的一个分支,研究生物的成年个体的外形和器官构造(

12、解剖学、组织学和器官学) 数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具(1960s) 形态学图像处理的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构 研究数字图像中物体目标的结构及拓扑关系 数学形态学应用在图像增强、分割、恢复、边缘检测、纹理分析等领域 作为预处理步骤:去除噪声(滤波器)目标提取,26/155,图像形态学,基本思想: 表现为一种邻域运算形式; 一种特殊定义的邻域称之为“结构单元”(Structure Element),在每个像素位置上它与二值图像对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图像的相应像素。 形态学运算的效果取决于结构

13、单元的大小、内容以及逻辑运算的性质。 形态学图像处理的数学基础和所用语言是集合论 形态学图像处理的基本运算有4个:膨胀、腐蚀、开操作和闭操作,27/155,集合论基础知识,集合的并、交、补、差,28/155,集合论基础知识,集合B的反射 ,定义为 =w|w= b,bB即关于原集合原点对称 集合A平移到点z=(z1,z2),表示为(A)z,定义为 (A)z =c| c = a+ z, aA,29/155,二值形态学,二值形态学中的运算对象是集合。设A为图像集合,S为结构元为结构元素,数学形态学运算是用S对A进行操作。 需要指出,实际上结构元素本身也是一个图像集合。对每个结构元素可以指定一个原点,

14、它是结构元素参与形态学运算的参考点。 应注意,原点可以包含在结构元素中,也可以不包含在结构元素中,但运算的结果常不相同。 二值形态学中两个最基本的运算是腐蚀与膨胀,30/155,膨胀和腐蚀,膨胀:使图像扩大 A和B是两个集合,A被B膨胀定义为: 上式表示:B的反射进行平移与A的交集不为空 B的反射:相对于自身原点的映象 B的平移:对B的反射进行位移 膨胀的另一个定义 上式表示:B的反射进行平移与A的交集是A的子集,31/155,32/155,33/155,膨胀与腐蚀,膨胀-算法实现过程如下: 将结构元素B的原点移至集合A的某一点, 将结构元素中点的坐标与集合A中该点坐标相加,得到对集合中一点的

15、膨胀运算结果. 对集合A中所有元素重复该过程,34/155,=,35/155,膨胀应用举例,桥接文字裂缝 优点:在一幅二值图像中直接得到结果,对比低通滤波方法,36/155,膨胀和腐蚀,腐蚀:使图像缩小 A和B是两个集合,A被B腐蚀定义为: 集合B称为结构元素 A B由将B平移z但仍包含在A内的所有点z组成。 如果B看作为模板,则A B由在平移模板的过程中,所经可以填入A内部的模板的原点组成。,37/155,腐蚀 对一个给定的目标图像X和一个结构元素 S,将S在图像上移动。在每一个当前位置x,S+x只有三种可能的状态 第一种情形说明S+x与X相关最大, 第二种情形说明S+x与X不相关, 第三种

16、情形说明S+x与X只是部分相关 X用S腐蚀的结果是所有使S平移x后仍在X中的x的集合。换句话说,用S来腐蚀X得到的集合是S完全包括在X中时S的原点位置的集合。,膨胀和腐蚀,38/155,39/155,40/155,膨胀和腐蚀,腐蚀的作用 腐蚀在数学形态学运算中的作用是消除物体边界点 如果结构元素取33的像素块,腐蚀将使物体的边界沿周边减少一个像素 腐蚀可以把小于结构元素的物体(毛刺、小凸起)去除,这样选取不同大小的结构元素,就可以在原图像中去掉不同大小的物体 如果两个物体之间有细小的连通,那么当结构元素足够大时,通过腐蚀运算可以将两个物体分开,41/155,膨胀和腐蚀,腐蚀运算的示例 图(a)

17、中的阴影部分为集合X,图(b)中的中的阴影部分为结构元素S,而图(c)中黑色部分给出了结果。 由图可见,腐蚀将图像(区域)收缩小了。,42/155,膨胀和腐蚀,腐蚀应用举例 使用腐蚀消除图像的细节部分,产生滤波器的作用 包含边长为1,3,5,7,9 和15像素正方形的二 值图像 使用1313像素大小 的结构元素腐蚀原图 像的结果 使用1313像素大小的结 构元素膨胀图b,恢复原来 1515尺寸的正方形,43/155,腐蚀与膨胀并不互为逆运算,AB,(AB) B,开运算(先腐蚀再膨胀),A,B,44/155,开操作和闭操作,开操作:使图像的轮廓变得光滑,断开狭窄的间断和消除细的突出物 使用结构元

18、素B对集合A进行开操作,定义为: AoB = (AB) B 含义:先用B对A腐蚀,然后用B对结果膨胀 另一个定义 AoB = (B)z | (B)z A,45/155,开操作的几何解释,AoB的边界通过B中的点完成 B在A的边界内转动时,B中的点所能到达的A的边界的最远点,46/155,开运算去掉了凸角 (a) 结构元素S1和S2; (b) XS1; (c) XS2,47/155,开操作和闭操作,闭操作:同样使图像的轮廓变得光滑,但与开操作相反,它能消除狭窄的间断和长细的鸿沟,消除小的孔洞,并填补轮廓线中的裂痕 使用结构元素B对集合A进行闭操作,定义为: AB = (AB)B 含义:先用B对A

19、膨胀,然后用B对结果腐蚀,48/155,闭操作的几何解释,AB的边界通过B中的点完成 B在A的边界外部转动,凹形结构,49/155,开操作和闭操作应用举例,C,D,E,先开操作再闭操作,构成噪声滤波器,50/155,开操作和闭操作应用举例,a图是受噪声污染的指纹二值图像,噪声为黑色背景上的亮元素和亮指纹部分的暗元素 b图是使用的结构元素 c图是使用结构元素对图a腐蚀的结果:黑色背景噪声消除了,指纹中的噪声尺寸增加 d图是使用结构元素对图c膨胀的结果:包含于指纹中的噪声分量的尺寸被减小或被完全消除,带来的问题是:在指纹纹路间产生了新的间断 e图是对图d膨胀的结果,图d的大部分间断被恢复,但指纹的

20、线路变粗了 f图是对图e腐蚀的结果,即对图d中开操作的闭操作。最后结果消除了噪声斑点 缺点:指纹线路还是有缺点,可以通过加入限制性条件解决,51/155,形态学的主要应用,边界提取 定义 (A)= A(AB) 上式表示:先用B对A腐蚀,然后用A减去腐蚀得到,B是结构元素,52/155,形态学的主要应用,边界提取举例 1表示为白色,0表示为黑色,53/155,形态学的主要应用,区域填充 定义:设所有非边界(背景)点标记为0,则将1赋给p点开始, 实现目的:从边界内的一个点开始,用1填充整个区域 X0=p,如果Xk=Xk-1,则算法在迭代的第k步结束。Xk和A的并集包含被填充的集合和它的边界 条件

21、膨胀:如果对上述公式的左部不加限制,则上述公式的膨胀将填充整个区域。利用Ac 的交集将结果限制在感兴趣区域内,实现条件膨胀。 Ac是A的补集。,54/155,形态学的主要应用区域填充,55/155,形态学的主要应用,连通分量的提取 实现目的:在二值图像中提取连通分量 令Y表示一个包含于集合A中的连通分量,并假设Y中的一个点p是已知的。用下列迭代式生成Y的所有元素: Xk =(Xk1 B)A k =1,2,3,. x0=p,如果Xk=Xk-1,算法收敛,令Y=Xk,56/155,形态学的主要应用,连通分量提取的应用举例 使用连通分量检测包装食物中的外来物,57/155,作业4,1. 用OpenC

22、V实现作业2;对某一个二值化后的图像进行腐蚀、膨胀、开、闭操作,将结果保存下来;把二值图像中的较小的连通分量去掉,只保留最大的前两个分量,将结果保存成文件 2.从摄像头得到视频流,从中任意选取5帧,保存成图像文件 3.从AVI文件读取视频,从中任意选取5帧,保存成图像文件 4.从摄像头得到视频流,在指定的窗口内实时显示该视频,58/155,教学内容,第一部分:基本概念和操作 图像像素间联系 图像的基本统计特性直方图 基本图像处理技术点运算、二值图像形态学操作、连通分量分析 第二部分: OpenCV OpenCV概述 基础结构与操作 基本OpenCV程序与示例,59/155,第二部分: Open

23、CV OpenCV概述 基础结构与操作 基本OpenCV程序与示例 注:本讲义中部分代码来自OpenCV样例,部分代码来自OpenCV教程基础篇,部分代码则从网上收集。,60/155,OpenCV概述,OpenCV是Intel开源计算机视觉库。 它由一系列 C 函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。 The current release version is 2.4.6 (April 2013) OpenCV 的特点 拥有包括 500 多个C函数的跨平台的中、高层 API 跨平台:Windows, Linux 免费(FREE):无论对非商业应用和商业应用 速

24、度快 使用方便,61/155,OpenCV 模块,CXCORE basic structures and algoritms, XML support, drawing functions,CV Image processing and vision,HighGUI GUI, Image and Video I/O,ML Machine Learning algorithms,CVAux,62/155,63/155,图像数据操作(内存分配与释放,图像复制、设定和转换) 图像/视频的输入输出(支持文件或摄像头的输入,图像/视频文件的输出) 矩阵/向量数据操作及线性代数运算(矩阵乘积、矩阵方程求解

25、、特征值、奇异值分解) 支持多种动态数据结构(链表、队列、数据集、树、图) 基本图像处理(去噪、边缘检测、角点检测、采样与插值、色彩变换、形态学处理、直方图、图像金字塔结构) 结构分析(连通域/分支、轮廓处理、距离转换、图像矩、模板匹配、霍夫变换、多项式逼近、曲线拟合、椭圆拟合、狄劳尼三角化) 摄像头定标(寻找和跟踪定标模式、参数定标、基本矩阵估计、单应矩阵估计、立体视觉匹配) 运动分析(光流、动作分割、目标跟踪) 目标识别(特征方法、HMM模型) 基本的GUI(显示图像/视频、键盘/鼠标操作、滑动条) 图像标注(直线、曲线、多边形、文本标注) Image labeling (line, co

26、nic, polygon, text drawing),64/155,OpenCV的下载与安装,1、下载地址 http:/ 2、VC6.0下的安装与配置 参见 http:/ 3、.NET 2003下的安装与配置 参见 http:/ MSVS .net 2k3,Create a “Win32 Console Project“,Make it an “Empty Project“ by selecting the box under “Application Settings“,66/155,Configuring MSVS .net 2k3,Select “C+ file“ and give i

27、t a name,Creating a file makes it possible to set “Additional Include Directives“ in the C/C+ pane under the project properties.,67/155,Configuring MSVS .net 2k3,In order to build projects using OpenCV the required libraries and directives must be included in the projects properties,68/155,Configuri

28、ng MSVS .net 2k3,Select the “Additional Include Directives“,69/155,Configuring MSVS .net 2k3,Select the “Additional Dependencies“,70/155,Testing MSVS .net 2k3,Now that the environment is configured it would be a good idea to test it to make sure that a program will correctly build and run.,#include

29、#include /*This will pop up a small box with “Hello World“ as the text.*/ int main( int argc, char* argv ) /declare for the height and width of the image int height = 320; int width = 240; /specify the point to place the text CvPoint pt = cvPoint( height/4, width/2 ); /Create an 24 depth, 3 chanels

30、IplImage* hw = cvCreateImage(cvSize(height, width), 24, 3); /initialize the font CvFont font; cvInitFont( ,71/155,Testing MSVS .net 2k3,Output of Program,72/155,OpenCV 编码样式指南,1、文件命名:有cv和cvaux库文件的命名必须服从于以下规则: 所有的CV库文件名前缀为cv 混合的C/C+接口头文件扩展名为 .h 纯C+接口头文件扩展名为 .hpp 实现文件扩展名为 .cpp 为了与POSIX兼容,文件名都以小写字符组成,73

31、/155,OpenCV 编码样式指南,2、文件结构 每个文件以BSD兼容的许可声明(模板在Contributors_BSD_Licsense.htm文件中可以找到)开头; 一行最多90个字符,不包括行结束符 不使用制表符 缩进为4个空格符,所以制表符应该用1-4个空格替换(依据开始列确定) 头文件必须使用保护宏,防止文件被重复包含。 混合C/C+接口头文件用extern “C“ 包含C语言定义。 为了使预编译头机制在Visual C+中工作正常,源文件必须在其它头文件前包含precomp.h头文件。,74/155,OpenCV 编码样式指南,3、命名约定 OpenCV中使用大小写混合样式来标识

32、外部函数、数据类型和类方法。 宏全部使用大写字符,词间用下划线分隔。 所有的外部或内部名称,若在多个文件中可见,则必须含有前缀: 外部函数使用前缀cv 内部函数使用前缀Icv 数据结构(C结构体、枚举、联合体、类)使用前缀Cv 外部或某些内部宏使用前缀CV_ 内部宏使用前缀ICV_,75/155,OpenCV 编码样式指南,4、函数接口设计:为了保持库的一致性,以如下方式设计接口非常重要。函数接口元素包括: 功能 名称 返回值 参数类型 参数顺序 参数默认值 函数功能必须定义良好并保持精简。函数应该容易镶入到使用其它OpenCV函数的不同处理过程。函数名称应该简单并能体现函数的功能。 大多数函

33、数名形式:cv,76/155,A Simple OpenCV Program,1. #include 2. #include 3. #include 4. int main( int argc, char* argv ) 5. CvPoint center; 6. double scale=-3; 7. IplImage* image = argc=2 ? cvLoadImage(argv1) : 0; 8. if(!image) return -1; 9. center = cvPoint(image-width/2,image-height/2); 10. for(int i=0;ihei

34、ght;i+) 11. for(int j=0;jwidth;j+) 12. double dx=(double)(j-center.x)/center.x; 13. double dy=(double)(i-center.y)/center.y; 14. double weight=exp(dx*dx+dy*dy)*scale); 15. uchar* ptr = ,Lena.jpg,77/155,基本数据结构,点:CvPoint 、CvPoint2D32f、CvPoint3D32f 矩形框大小:CvSize 、CvSize2D32f 矩形框:CvRect 可以存放1-4个数值的数组:CvS

35、calar 定义迭代算法的终止规则:CvTermCriteria 矩阵:CvMat 、CvMatND 、CvSparseMat IPL图像头部:IplImage 定义不确定的数组:CvArr (仅作函数参数),78/155,点数据结构,CvPoint 二维坐标系下的点,类型为整型 typedef struct CvPoint int x; /* X坐标, 通常以0为基点 */ int y; /* y坐标, 通常以0为基点 */ CvPoint; /* 构造函数 */ inline CvPoint cvPoint( int x, int y ); /* 从 CvPoint2D32f类型转换得来

36、*/ inline CvPoint cvPointFrom32f( CvPoint2D32f point ) CvPoint2D32f :二维坐标下的点,类型为浮点 CvPoint3D32f :三维坐标下的点,类型为浮点,79/155,矩形框大小数据结构,CvSize 矩形框大小,以像素为精度 typedef struct CvSize int width; /* 矩形宽 */ int height; /* 矩形高 */ CvSize; /* 构造函数 */ inline CvSize cvSize( int width, int height ); CvSize2D32f,80/155,矩形

37、框数据结构,CvRect 矩形框的偏移和大小 typedef struct CvRect int x; /* 方形的最左角的x-坐标 */ int y; /* 方形的最上或者最下角的y-坐标 */ int width; /* 宽 */ int height; /* 高 */ CvRect; /* 构造函数*/ inline CvRect cvRect(int x, int y, int width, int height);,81/155,矩阵数据结构,CvMat 二维矩阵 typedef struct CvMat int type; /* CvMat 标识, 元素类型和标记 */ int s

38、tep; /* 以字节为单位的行数据长度*/ int rows; /*行数*/ int cols; /*列数*/ int* refcount; /* 数据引用计数 */ union uchar* ptr; short* s; int* i; float* fl; double* db; data; /* data 指针 */ ,82/155,分配矩阵空间 CvMat* cvCreateMat(int rows, int cols, int type); type: 矩阵元素类型. 格式为CV_(S|U|F)C. 例如: CV_8UC1 表示8位无符号单通道矩阵, CV_32SC2表示32位有符

39、号双通道矩阵. 例程: CvMat* M = cvCreateMat(4,4,CV_32FC1); 释放矩阵空间: CvMat* M = cvCreateMat(4,4,CV_32FC1); cvReleaseMat( / Get M(i,j),83/155,矩阵数据结构,CvMatND:多维、多通道密集数组 CvSparseMat:多维、多通道稀疏数组 CvArr:不确定数组,84/155,图像头数据,IplImage:IPL 图像头,85/155,图像头数据,IplImage:IPL 图像头 typedef struct _IplImage int nSize; /* IplImage大小

40、 */ int ID; /* 版本 (=0)*/ int nChannels; /* 大多数OPENCV函数支持1,2,3 或4 个通道 */ int alphaChannel; /* 被OpenCV忽略 */ int depth; /* 像素的位深度: IPL_DEPTH_8U,IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */ char colorModel4; char channelSeq4; /* 被OpenCV忽略 */ int dataOr

41、der; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道. cvCreateImage只能创建交叉存取图像 */ int origin; /* 0 - 顶左结构,1 - 底左结构 (BMP风格) */ int align; /* 图像行排列 (4 or 8). OpenCV 用widthStep 代替 */,86/155,int width; /* 图像宽像素数 */ int height; /* 图像高像素数*/ struct _IplROI *roi;/* 图像感兴趣区域. 当该值非空只对该区域进行处理 */ struct _IplImage *maskROI; /* 在 Ope

42、nCV中必须置NULL */ void *imageId; /* 同上*/ struct _IplTileInfo *tileInfo; /*同上*/ int imageSize; /* 图像数据大小,单位字节*/ char *imageData; /* 指向排列的图像数据 */ int widthStep; /* 排列的图像行大小,以字节为单位 */ int BorderMode4; int BorderConst4; /* 边际结束模式, 被忽略*/ char *imageDataOrigin; /* 指针指向一个不同的图像数据结构,是 为了纠正图像内存分配准备的 */ IplImage;

43、,widthStep表示存储一行像素需要的字节数。 widthStep必须是4的倍数,如果8U图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只使用前3个,最后一个不用。 也就是一个宽3高3的图像的imageData数据大小为4*3=12字节。 如果32F的图像,那么widthStep=width*4。,87/155,图像头数据,IplImage结构来自于 Intel Image Processing Library。OpenCV 只支持其中的一个子集: alphaChannel 在OpenCV中被忽略。 colorModel 和channelSeq 被O

44、penCV忽略。 dataOrder 必须是IPL_DATA_ORDER_PIXEL (颜色通道是交叉存取),然而平面图像的被选择通道可以被处理,就像COI(感兴趣的通道)被设置过一样。 align 是被OpenCV忽略的,而用 widthStep 去访问后继的图像行。 不支持maskROI 。处理MASK的函数把他当作一个分离的参数。MASK在 OpenCV 里是 8-bit,然而在 IPL他是 1-bit。 tileInfo 不支持。 BorderMode和BorderConst是不支持的。 OpenCV处理ROI有不同的要求。要求原图像和目标图像的尺寸或 ROI的尺寸必须精确匹配。,88

45、/155,基本OpenCV操作,GUI命令 图像的使用与操作 视频的使用与操作,89/155,HighGUI操作,“Smart“ windows Image I/O, rendering Processing keyboard and other events, timeouts Trackbars Mouse callbacks Video I/O,90/155,Windows,cvNamedWindow(window_name, fixed_size_flag) cvNamedWindow(window_name, x, y) cvDestroyWindow(window_name) cr

46、eates window accessed by its name. Window handles repaint, resize events. Its position is remembered in registry. cvNamedWindow(“ViewA“,1); cvMoveWindow(“ViewA“,300,100); cvDestroyWindow(“ViewA“); cvShowImage(window_name, image); copies the image to window buffer, then repaints it when necessary. 8u

47、|16s|32s|32fC1|3|4 are supported. only the whole window contents can be modified. Dynamic updates of parts of the window are done using operations on images, drawing functions etc.,91/155,Windows,等待按键cvWaitKey int cvWaitKey( int delay=0 ) 如果delay=0, 则无限等待,则等待delay毫秒则返回 在程序循环中,有时候由于程序一直处于计算中,窗口无法重新恢复

48、(如读出视频中的所有帧并显示),可以加入cvWaitKey,使之等待几毫秒,让窗口完成重新绘制再执行其他操作,92/155,图像的使用与操作(1),创建头并分配数据 CreateImage IplImage* cvCreateImage( CvSize size, int depth, int channels ); size:图像宽、高. depth:图像元素的位深度, IPL_DEPTH_8U|8S|16U|16S|32S|32F|64F channels:每个元素(像素)的颜色通道数量.可以是 1, 2, 3 或 4. 释放头和图像数据 ReleaseImage void cvReleaseImage( IplImage* image ); 制图像 CloneImage IplImage* cvC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1