快速学习OPENCV常用函数

合集下载

cv2库函数

cv2库函数

cv2 库是OpenCV(Open Source Computer Vision Library)的Python 接口。

OpenCV 是一个开源计算机视觉库,提供了许多用于图像处理和计算机视觉任务的函数。

以下是一些常用的cv2 库函数,涵盖了图像处理、计算机视觉和计算机图形学等领域:图像读取和显示:cv2.imread():读取图像文件。

cv2.imshow():显示图像窗口。

cv2.imwrite():保存图像。

颜色空间转换:cv2.cvtColor():进行颜色空间的转换,例如从BGR 到灰度。

图像处理:cv2.resize():调整图像大小。

cv2.flip():翻转图像。

cv2.rotate():旋转图像。

cv2.threshold():图像二值化。

滤波器和卷积:cv2.filter2D():2D 卷积。

cv2.blur():均值模糊。

cv2.GaussianBlur():高斯模糊。

边缘检测:cv2.Canny():Canny 边缘检测。

轮廓和形状分析:cv2.findContours():查找图像中的轮廓。

cv2.drawContours():绘制轮廓。

图像特征和描述符:cv2.SIFT():尺度不变特征变换。

cv2.SURF():加速稳健特征。

计算机视觉:cv2.matchTemplate():模板匹配。

cv2.findHomography():查找透视变换。

cv2.solvePnP():解决透视问题。

摄像头和视频处理:cv2.VideoCapture():打开摄像头。

cv2.VideoWriter():写入视频文件。

cv2.VideoCapture.read():读取摄像头帧。

图像绘制:cv2.line():绘制直线。

cv2.circle():绘制圆。

cv2.rectangle():绘制矩形。

这只是cv2 库中一小部分常用函数的列表。

OpenCV 提供了丰富的功能,适用于各种计算机视觉和图像处理任务。

opencv基本使用方法

opencv基本使用方法

OpenCV基本使用方法一、介绍O p en CV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法,可以用于图像处理、目标检测、人脸识别等各种应用。

本文档将介绍O pe nC V的基本使用方法,包括图像读取、显示、保存以及常用的图像处理操作。

二、图像读取与显示1.读取图像要读取图像,可以使用`cv2.im re ad()`函数。

该函数接受图像文件的路径作为参数,并返回一个表示图像的多维数组。

i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")2.显示图像要显示图像,可以使用`cv2.im sh ow()`函数。

该函数接受一个窗口名称和一个表示图像的多维数组作为参数。

i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")c v2.im sh ow("Im age",i ma ge)c v2.wa it Ke y(0)c v2.de st ro yA ll Wind ow s()三、图像保存与格式转换1.保存图像要保存图像,可以使用`cv2.im wr it e()`函数。

该函数接受图像保存的路径和表示图像的多维数组作为参数。

i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")c v2.im wr it e("n ew_i ma ge.j pg",im age)2.格式转换要将图像从一种格式转换为另一种格式,可以使用`c v2.c vt Co lo r()`函数。

该函数接受表示图像的多维数组和转换的标志作为参数。

i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")g r ay_i ma ge=c v2.cv t Co lo r(im ag e,cv2.CO LO R_BG R2GR AY)四、常用的图像处理操作1.转换为灰度图要将彩色图像转换为灰度图,可以使用`c v2.cv tC ol or()`函数,并指定转换标志为`cv2.CO LO R_BG R2GR AY`。

opencv 坐标变换函数

opencv 坐标变换函数

opencv 坐标变换函数OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。

在OpenCV中,坐标变换是常用的操作之一,它可以帮助我们将图像或物体从一个坐标系转换到另一个坐标系,以适应不同的需求或处理流程。

OpenCV提供了一些函数来实现坐标变换,包括平移、旋转、缩放和仿射变换等。

下面将逐个介绍这些函数的用法和作用。

1. 平移变换(translation):通过平移变换,我们可以将图像或物体沿着x和y轴方向移动一定的距离。

在OpenCV中,可以使用`cv2.warpAffine`函数来实现平移变换。

该函数接受一个输入图像、一个平移矩阵和输出图像的大小作为参数,返回经过平移变换后的图像。

2. 旋转变换(rotation):通过旋转变换,我们可以将图像或物体按照一定的角度进行旋转。

在OpenCV中,可以使用`cv2.getRotationMatrix2D`函数来获取旋转矩阵,然后使用`cv2.warpAffine`函数进行旋转变换。

该函数接受一个输入图像、一个旋转矩阵和输出图像的大小作为参数,返回经过旋转变换后的图像。

3. 缩放变换(scaling):通过缩放变换,我们可以将图像或物体按照一定的比例进行放大或缩小。

在OpenCV中,可以使用`cv2.resize`函数来实现缩放变换。

该函数接受一个输入图像和输出图像的大小作为参数,返回经过缩放变换后的图像。

4. 仿射变换(affine transformation):通过仿射变换,我们可以对图像或物体进行平移、旋转和缩放等多个操作的组合。

在OpenCV 中,可以使用`cv2.getAffineTransform`函数来获取仿射矩阵,然后使用`cv2.warpAffine`函数进行仿射变换。

该函数接受一个输入图像、一个仿射矩阵和输出图像的大小作为参数,返回经过仿射变换后的图像。

除了上述函数之外,OpenCV还提供了其他一些函数来实现更复杂的坐标变换,如透视变换(perspective transformation)和反向变换(inverse transformation)等。

OpenCV入门教程

OpenCV入门教程

O p e n C V入门教程-CAL-FENGHAI.-(YICAI)-Company One1OpenCV 入门教程作者:于仕琪年 8 月版权所有于仕琪本作品采用知识共享署名-相同方式共享国际许可协议进行许可。

1前言OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。

很多初学者希望快速掌握OpenCV 的使用方法,但往往会遇到各种各样的困难。

其实仔细分析,造成这些困难的原因有两类:第一类是C/C++编程基础不过关;第二类是不了解算法原理。

解决这些困难无非提升编程能力,以及提升理论基础知识。

提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。

同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。

我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。

在实践中学习才是最高效的学习方式。

本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数据结构以及用法。

此外,如您发现有错误之处,欢迎来信指正。

于仕琪深圳大学插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的研究生。

欲了解详情可以访问深圳大学招生网或者给我发 email。

目录第 1 章预备知识 (5)编程的流程 (5)什么叫编辑 (6)什么叫编译 (6)什么叫连接 (7)什么叫运行 (7)Visual C++是什么 (8)头文件 (9)库文件 (10)OpenCV 是什么 (11)什么是命令行参数 (12)常见编译错误 (13)找不到头文件 (13)拼写错误 (14)常见链接错误 (15)运行时错误 (17)第 2 章OpenCV 介绍 (19)OpenCV 的来源 (19)OpenCV 的协议 (19)第 3 章图像的基本操作 (21)图像的表示 (21)Mat 类 (23)创建 Mat 对象 (24)构造函数方法 (24)create()函数创建对象 (25)Matlab 风格的创建对象方法 (26)矩阵的基本元素表达 (26)像素值的读写 (27)at()函数 (28)使用迭代器 (29)通过数据指针 (30)选取图像局部区域 (32)单行或单列选择 (32)用 Range 选择多行或多列 (33)感兴趣区域 (33)取对角线元素 (34)Mat 表达式 (34)Mat_类 (36)Mat 类的内存管理 (38)输出 (40)Mat 与 IplImage 和 CvMat 的转换 (42)Mat 转为 IplImage 和 CvMat 格式 (42)IplImage 和 CvMat 格式转为 Mat (42)第 4 章数据获取与存储 (44)读写图像文件 (44)读图像文件 (44)写图像文件 (45)读写视频 (47)读视频 (47)写视频 (49)第1章预备知识OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计算机视觉理论知识外,还需要具有一定的编程能力。

opencv所有函数汇总

opencv所有函数汇总

opencv所有函数汇总OpenCV是一个开放源代码的计算机视觉和机器学习软件库。

它拥有多种函数和方法,可用于处理图像和视频、目标检测、特征提取、图像分割、图像配准、机器学习等多个领域。

以下是一些常用的OpenCV函数的汇总:1. cv2.imread该函数读取图像文件,并返回一个NumPy数组,该数组表示图像的像素值。

2. cv2.imshow用于在窗口中显示图像。

3. cv2.imwrite将图像保存到指定的文件路径。

4. cv2.cvtColor用于将图像从一个颜色空间转换为另一个颜色空间。

5. cv2.resize可用于调整图像的大小。

6. cv2.flip用于翻转图像。

7. cv2.rectangle绘制矩形框。

8. cv2.circle绘制圆形。

9. cv2.line绘制线条。

10. cv2.putText在图像上绘制文本。

11. cv2.threshold将图像分割为黑白两个阈值。

12. cv2.adaptiveThreshold根据图像不同区域的光照条件对图像进行阈值处理。

13. cv2.medianBlur对图像进行中值滤波。

14. cv2.GaussianBlur对图像进行高斯模糊。

15. cv2.bilateralFilter对图像进行双边滤波。

16. cv2.contourArea计算轮廓的面积。

17. cv2.findContours找到图像中的轮廓。

18. cv2.drawContours在图像上绘制轮廓。

19. cv2.matchTemplate在图像中查找指定模板的匹配项。

20. cv2.HoughCircles在图像中检测圆。

21. cv2.HoughLines在图像中检测直线。

22. cv2.goodFeaturesToTrack在图像中寻找角点。

23. cv2.findHomography计算两个图像之间的单应性矩阵。

24. cv2.warpPerspective将图像进行透视变换。

cv2库函数

cv2库函数

cv2库函数OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉功能。

在OpenCV中,cv2是一个用于Python的库,它提供了大量用于图像处理和计算机视觉任务的函数。

在本文中,我们将介绍一些常用的cv2库函数,以帮助读者更好地了解如何使用OpenCV进行图像处理和计算机视觉任务。

1. 读取和显示图像:cv2.imread()和cv2.imshow()cv2.imread()函数用于读取图像文件,可以指定图像文件的路径和读取模式。

读取的图像会以NumPy数组的形式返回,可以方便地进行后续处理。

cv2.imshow()函数用于显示图像,可以指定窗口的名称和要显示的图像。

通过这两个函数,我们可以快速读取和显示图像文件,方便进行后续处理和分析。

2. 图像的灰度化:cv2.cvtColor()cv2.cvtColor()函数用于将彩色图像转换为灰度图像,可以指定转换的颜色空间。

在图像处理和计算机视觉任务中,常常需要将彩色图像转换为灰度图像进行后续处理,比如边缘检测、特征提取等。

通过cv2.cvtColor()函数,可以方便地进行灰度化处理,为后续任务提供更好的基础。

3. 图像的缩放和裁剪:cv2.resize()和数组切片cv2.resize()函数用于对图像进行缩放操作,可以指定目标图像的大小和缩放模式。

图像缩放是图像处理和计算机视觉任务中常用的操作,可以用于调整图像的大小、改变图像的分辨率等。

除了cv2.resize()函数外,还可以使用NumPy数组的切片操作进行图像的裁剪,实现对图像的局部操作和提取感兴趣的区域。

4. 图像的边缘检测:cv2.Canny()cv2.Canny()函数用于对图像进行边缘检测,可以指定边缘检测的参数和阈值。

边缘检测是图像处理和计算机视觉任务中常用的操作,可以用于检测图像中的边缘和轮廓,提取图像的关键信息。

opencv常用函数

opencv常用函数

01、cv‎L oad:‎矩阵读取;‎102、‎c vOpe‎n File‎S tora‎g e:为读‎/写打开存‎储文件;‎103、c‎v Rele‎a seFi‎l eSto‎r age:‎释放存储的‎数据;1‎04、cv‎S tart‎W rite‎S truc‎t:开始写‎入新的数据‎结构;1‎05、cv‎E ndWr‎i teSt‎r uct:‎结束写入数‎据结构;‎106、c‎v Writ‎e Int:‎写入整数型‎;107‎、cvWr‎i teRe‎a l:写入‎浮点型;‎108、c‎v Writ‎e Stri‎n g:写入‎字符型;‎109、c‎v Writ‎e Comm‎e nt:写‎一个XML‎或YAML‎的注释字串‎;110‎、cvWr‎i te:写‎一个对象;‎11‎1、cvW‎r iteR‎a wDat‎a:写入多‎个数值;‎112、c‎v Writ‎e File‎N ode:‎将文件节点‎写入另一个‎文件存储器‎;113‎、cvGe‎t Root‎F ileN‎o de:获‎取存储器最‎顶层的节点‎;114‎、cvGe‎t File‎N odeB‎y Name‎:在映图或‎存储器中找‎到相应节点‎;115‎、cvGe‎t Hash‎e dKey‎:为名称返‎回一个惟一‎的指针;‎116、c‎v GetF‎i leNo‎d e:在映‎图或文件存‎储器中找到‎节点;1‎17、cv‎G etFi‎l eNod‎e Name‎:返回文件‎的节点名;‎118、‎c vRea‎d Int:‎读取一个无‎名称的整数‎型;11‎9、cvR‎e adIn‎t ByNa‎m e:读取‎一个有名称‎的整数型;‎120、‎c vRea‎d Real‎:读取一个‎无名称的浮‎点型;‎121、‎c vRea‎d Real‎B yNam‎e:读取一‎个有名称的‎浮点型;‎122、c‎v Read‎S trin‎g:从文件‎节点中寻找‎字符串;‎123、c‎v Read‎S trin‎g ByNa‎m e:找到‎一个有名称‎的文件节点‎并返回它;‎124、‎c vRea‎d:将对象‎解码并返回‎它的指针;‎125、‎c vRea‎d ByNa‎m e:找到‎对象并解码‎;126‎、cvRe‎a dRaw‎D ata:‎读取多个数‎值;12‎7、cvS‎t artR‎e adRa‎w Data‎:初始化文‎件节点序列‎的读取;‎128、c‎v Read‎R awDa‎t aSli‎c e:读取‎文件节点的‎内容;1‎29、cv‎G etMo‎d uleI‎n fo:检‎查IPP库‎是否已经正‎常安装并且‎检验运行是‎否正常;‎130、c‎v Resi‎z eWin‎d ow:用‎来调整窗口‎的大小;‎131‎、cvSa‎v eIma‎g e:保存‎图像;1‎32、cv‎M oveW‎i ndow‎:将窗口移‎动到其左上‎角为x,y‎的位置;‎133、c‎v Dest‎r oyAl‎l Wind‎o w:用来‎关闭所有窗‎口并释放窗‎口相关的内‎存空间;‎134、c‎v GetT‎r ackb‎a rPos‎:读取滑动‎条的值;‎135、c‎v SetT‎r ackb‎a rPos‎:设置滑动‎条的值;‎136、c‎v Grab‎F rame‎:用于快速‎将视频帧读‎入内存;‎137、c‎v Retr‎i eveF‎r ame:‎对读入帧做‎所有必须的‎处理;1‎38、cv‎C onve‎r tIma‎g e:用于‎在常用的不‎同图像格式‎之间转换;‎139、‎c vEro‎d e:形态‎腐蚀;1‎40、cv‎D ilat‎e:形态学‎膨胀;‎141、‎c vMor‎p holo‎g yEx:‎更通用的形‎态学函数;‎142、‎c vFlo‎o dFil‎l:漫水填‎充算法,用‎来进一步控‎制哪些区域‎将被填充颜‎色;14‎3、cvR‎e size‎:放大或缩‎小图像;‎144、c‎v PyrU‎p:图像金‎字塔,将现‎有的图像在‎每个维度上‎都放大两倍‎;145‎、cvPy‎r Segm‎e ntat‎i on:利‎用金字塔实‎现图像分割‎;146‎、cvTh‎r esho‎l d:图像‎阈值化;‎147、c‎v Acc:‎可以将8位‎整数类型图‎像累加为浮‎点图像;‎148、c‎v Adap‎t iveT‎h resh‎o ld:图‎像自适应阈‎值;14‎9、cvF‎i lter‎2D:图像‎卷积;1‎50、cv‎C opyM‎a keBo‎r der:‎将特定的图‎像轻微变大‎,然后以各‎种方式自动‎填充图像边‎界;15‎1、cvS‎o bel:‎图像边缘检‎测,Sob‎e l算子;‎152、‎c vLap‎l ace:‎拉普拉斯变‎换、图像边‎缘检测;‎153、c‎v Houg‎h Line‎s2:霍夫‎直线变换;‎154、‎c vHou‎g hCir‎c les:‎霍夫圆变换‎;155‎、cvRe‎m ap:图‎像重映射,‎校正标定图‎像,图像插‎值;15‎6、cvW‎a rpAf‎f ine:‎稠密仿射变‎换;15‎7、cvG‎e tQua‎d rang‎l eSub‎P ix:仿‎射变换;‎158、c‎v GetA‎f fine‎T rans‎f orm:‎仿射映射矩‎阵的计算;‎159、‎c vClo‎n eIma‎g e:将整‎个IplI‎m age结‎构复制到新‎的IplI‎m age中‎;160‎、cv2D‎R otat‎i onMa‎t rix:‎仿射映射矩‎阵的计算;‎161、‎c vTra‎n sfor‎m:稀疏仿‎射变换;‎162、c‎v Warp‎P ersp‎e ctiv‎e:密集透‎视变换(单‎应性);‎163、c‎v GetP‎e rspe‎c tive‎T rans‎f orm:‎计算透视映‎射矩阵;‎164、c‎v Pers‎p ecti‎v eTra‎n sfor‎m:稀疏透‎视变换;‎165、c‎v Cart‎T oPol‎a r:将数‎值从笛卡尔‎空间到极坐‎标(极性空‎间)进行映‎射;16‎6、cvP‎o larT‎o Cart‎:将数值从‎极性空间到‎笛卡尔空间‎进行映射;‎167、‎c vLog‎P olar‎:对数极坐‎标变换;‎168、c‎v DFT:‎离散傅里叶‎变换;1‎69、cv‎M ulSp‎e ctru‎m s:频谱‎乘法;1‎70、cv‎D CT:离‎散余弦变换‎;171‎、cvIn‎t egra‎l:计算积‎分图像;‎172、c‎v Dist‎T rans‎f orm:‎图像的距离‎变换;1‎73、cv‎E qual‎i zeHi‎s t:直方‎图均衡化;‎174、‎c vCre‎a teHi‎s t:创建‎一新直方图‎;175‎、cvMa‎k eHis‎t Head‎e rFor‎A rray‎:根据已给‎出的数据创‎建直方图;‎176、‎c vNor‎m aliz‎e Hist‎:归一化直‎方图;1‎77、cv‎T hres‎h Hist‎:直方图阈‎值函数;‎178、c‎v Calc‎H ist:‎从图像中自‎动计算直方‎图;17‎9、cvC‎o mpar‎e Hist‎:用于对比‎两个直方图‎的相似度;‎180、‎c vCal‎c EMD2‎:陆地移动‎距离(EM‎D)算法;‎181、‎c vCal‎c Back‎P roje‎c t:反向‎投影;1‎82、cv‎C alcB‎a ckPr‎o ject‎P atch‎:图块的方‎向投影;‎183、c‎v Matc‎h Temp‎l ate:‎模板匹配;‎184、‎c vCre‎a teMe‎m Stor‎a ge:用‎于创建一个‎内存存储器‎;185‎、cvCr‎e ateS‎e q:创建‎序列;1‎86、cv‎S eqIn‎v ert:‎将序列进行‎逆序操作;‎187、‎c vCvt‎S eqTo‎A rray‎:复制序列‎的全部或部‎分到一个连‎续内存数组‎中;18‎8、cvF‎i ndCo‎n tour‎s:从二值‎图像中寻找‎轮廓;1‎89、cv‎D rawC‎o ntou‎r s:绘制‎轮廓;1‎90、cv‎A ppro‎x Poly‎:使用多边‎形逼近一个‎轮廓;1‎91、cv‎C onto‎u rPer‎i mete‎r:轮廓长‎度;19‎2、cvC‎o ntou‎r sMom‎e nts:‎计算轮廓矩‎;193‎、cvMo‎m ents‎:计算Hu‎不变矩;‎194、c‎v Matc‎h Shap‎e s:使用‎矩进行匹配‎;195‎、cvIn‎i tLin‎e Iter‎a tor:‎对任意直线‎上的像素进‎行采样;‎196、c‎v Samp‎l eLin‎e:对直线‎采样;1‎97、cv‎A bsDi‎f f:帧差‎;198‎、cvWa‎t ersh‎e d:分水‎岭算法;‎199、c‎v Inpa‎i nt:修‎补图像;‎200、c‎v Good‎F eatu‎r esTo‎T rack‎:寻找角点‎;201‎、cvFi‎n dCor‎n erSu‎b Pix:‎用于发现亚‎像素精度的‎角点位置;‎202、‎c vCal‎c Opti‎c alFl‎o wLK:‎实现非金字‎塔的Luc‎a s-Ka‎n ade稠‎密光流算法‎;203‎、cvMe‎a nShi‎f t:me‎a n-sh‎i ft跟踪‎算法;2‎04、cv‎C amSh‎i ft:c‎a mshi‎f t跟踪算‎法;20‎5、cvC‎r eate‎K alma‎n:创建K‎a lman‎滤波器;‎206、c‎v Crea‎t eCon‎D ensa‎t ion:‎创建con‎d ensa‎t ion滤‎波器;2‎07、cv‎C onve‎r tPoi‎n tsHo‎m ogen‎i ous:‎对齐次坐标‎进行转换;‎208、‎c vFin‎d Ches‎s boar‎d Corn‎e rs:定‎位棋盘角点‎;209‎、cvFi‎n dHom‎o grap‎h y:计算‎单应性矩阵‎;210‎、cvRo‎d rigu‎e s2:罗‎德里格斯变‎换;21‎1、cvF‎i tLin‎e:直线拟‎合算法;‎212、c‎v Calc‎C ovar‎M atri‎x:计算协‎方差矩阵;‎213、‎c vInv‎e rt:计‎算协方差矩‎阵的逆矩阵‎;214‎、cvMa‎h alan‎o bis:‎计算Mah‎a lano‎b is距离‎;215‎、cvKM‎e ans2‎:K均值;‎216、‎c vClo‎n eMat‎:根据一个‎已有的矩阵‎创建一个新‎矩阵;2‎17、cv‎P reCo‎r nerD‎e tect‎:计算用于‎角点检测的‎特征图;‎218、c‎v GetI‎m age:‎C vMat‎图像数据格‎式转换成I‎p lIma‎g e图像数‎据格式;‎219、c‎v MatM‎u l:两矩‎阵相乘;‎。

opencv库常用函数

opencv库常用函数

opencv库常⽤函数常⽤opencv函数:1、cv2.line():画线——参数依次为:图⽚路径,起点和终点坐标值,颜⾊(rgb),线条宽度(像素)2、dst = cvtColor(src,code,dst=None,dstCn=None):颜⾊空间转换函数——参数依次为(原图像,color转化代码,输出图像,输出通道), 返回转换后的图像3、ret, dst = cv2.threshold(src, thresh, maxval, type):固定阈值⼆值化——src:输⼊图,只能输⼊单通道图像,通常来说为灰度图dst:输出图thresh:阈值maxval:当像素值超过了阈值(或者⼩于阈值,根据type来决定),所赋予的值type:⼆值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV4、cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) :查找检测物体的轮廓opencv2返回两个值:contours:hierarchy。

注:opencv3会返回三个值,分别是img, countours, hierarchy参数:第⼀个参数是寻找轮廓的图像;第⼆个参数表⽰轮廓的检索模式,有四种(本⽂介绍的都是新的cv2接⼝):cv2.RETR_EXTERNAL 表⽰只检测外轮廓cv2.RETR_LIST 检测的轮廓不建⽴等级关系cv2.RETR_CCOMP 建⽴两个等级的轮廓,上⾯的⼀层为外边界,⾥⾯的⼀层为内孔的边界信息。

如果内孔内还有⼀个连通物体,这个物体的边界也在顶层。

cv2.RETR_TREE 建⽴⼀个等级树结构的轮廓。

第三个参数method为轮廓的近似办法cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1cv2.CHAIN_APPROX_SIMPLE 压缩⽔平⽅向,垂直⽅向,对⾓线⽅向的元素,只保留该⽅向的终点坐标,例如⼀个矩形轮廓只需4个点来保存轮廓信息cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使⽤teh-Chinl chain 近似算法返回值cv2.findContours()函数返回两个值,⼀个是轮廓本⾝,还有⼀个是每条轮廓对应的属性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

访问图像元素如下:1、针对各种图像(包括4-通道)和矩阵的函数(cvGet2D,cvSet2D),但是它们都很慢.(img->origin=IPL_ORIGIN_TL)或者是左下角(img->origin=IPL_ORIGIN_BL)假设有8-bit1-通道的图像I(IplImage*img):I(x,y)~((uchar*)(img->imageData+img->widthStep*y))[x]假设有8-bit3-通道的图像I(IplImage*img):I(x,y)blue~((uchar*)(img->imageData+img->widthStep*y))[x*3]I(x,y)green~((uchar*)(img->imageData+img->widthStep*y))[x*3+1]I(x,y)red~((uchar*)(img->imageData+img->widthStep*y))[x*3+2]如果增加点(100,100)的亮度30,那么可以:CvPoint pt={100,100};((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3]+=30; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3+1]+=30; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3+2]+=30;CvPoint pt={100,100};uchar*temp_ptr=&((uchar*)(img->imageData+img->widthStep*pt.y))[x*3];temp_ptr[0]+=30;temp_ptr[1]+=30;temp_ptr[2]+=30;假设有32-bit浮点数,1-通道图像I(IplImage*img):I(x,y)~((float*)(img->imageData+img->widthStep*y))[x]现在,通用方法:假设有N-通道,类型为T的图像:I(x,y)c~((T*)(img->imageData+img->widthStep*y))[x*N+c]或者你可使用宏CV_IMAGE_ELEM(image_header,elemtype,y,x_Nc)I(x,y)c~CV_IMAGE_ELEM(img,T,y,x*N+c)2、访问矩阵元素设有32-bit浮点数的实数矩阵M(CvMat*mat):M(i,j)~((float*)(mat->data.ptr+mat->step*i))[j]设有64-bit浮点数的复数矩阵M(CvMat*mat):Re M(i,j)~((double*)(mat->data.ptr+mat->step*i))[j*2]Im M(i,j)~((double*)(mat->data.ptr+mat->step*i))[j*2+1]设有单通道矩阵,有宏CV_MAT_ELEM(matrix,elemtype,row,col),例如对32-bit浮点数的实数矩阵M(i,j)~CV_MAT_ELEM(mat,float,i,j),假如初始化3x3单位阵:CV_MAT_ELEM(mat,float,0,0)=1.f;CV_MAT_ELEM(mat,float,0,1)=0.f;CV_MAT_ELEM(mat,float,0,2)=0.f;CV_MAT_ELEM(mat,float,1,0)=0.f;CV_MAT_ELEM(mat,float,1,1)=1.f;CV_MAT_ELEM(mat,float,1,2)=0.f;CV_MAT_ELEM(mat,float,2,0)=0.f;CV_MAT_ELEM(mat,float,2,1)=0.f;CV_MAT_ELEM(mat,float,2,2)=1.f;3、处理独立的数据如300x20032-bit浮点数image/array,也就是对一个有60000个元素的数组.int cols=300,rows=200;float*myarr=new float[rows*cols];//step1)initializing CvMat headerCvMat mat=cvMat(rows,cols,CV_32FC1,//32-bit floating-point,single channel typemyarr//user data pointer(no data is copied));//step2)using cv functions,e.g.calculating l2(Frobenius)norm double norm=cvNorm(&mat,0,CV_L2);...delete myarr;其它情况在参考手册中有描述.见cvCreateMatHeader,cvInitMatHeader, cvCreateImageHeader,cvSetData etc.---------------------------------------------------------------------4、加载图像,显示/*usage:prog<image_name>*/#include"cv.h"#include"highgui.h"int main(int argc,char**argv){IplImage*img;if(argc==2&&(img=cvLoadImage(argv[1],1))!=0){cvNamedWindow("Image view",1);cvShowImage("Image view",img);cvWaitKey(0);//very important,contains event processing loop inside cvDestroyWindow("Image view");cvReleaseImage(&img);return0;}return-1;}void cvLaplace(IplImage*src,IplImage*dst,int apertureSize=3); void cvSobel(IplImage*src,IplImage*dst,int dx,int dy,int apertureSize=3);void cvCanny(IplImage*img,IplImage*edges,double lowThresh,double highThresh,int apertureSize=3);void cvPreCornerDetect(IplImage*img,IplImage*corners,Int apertureSize);void cvCornerEigenValsAndVecs(IplImage*img,IplImage*eigenvv,int blockSize,int apertureSize=3);void cvCornerMinEigenVal(IplImage*img,IplImage*eigenvv,int blockSize,int apertureSize=3);void cvGoodFeaturesToTrack(IplImage*image,IplImage*eigImage, IplImage*tempImage,CvPoint2D32f*corners,int*cornerCount,double qualityLevel,double minDistance);//对已经粗检测出的角点进行亚像素精准定位void cvFindCornerSubPix(IplImage*img,CvPoint2D32f*corners,int count,CvSize win,CvSize zeroZone,CvTermCriteria criteria);//金字塔分解与重构void cvPyrDown(IplImage*src,IplImage*dst,IplFilterfilter=IPL_GAUSSIAN_5x5);void cvPyrUp(IplImage*src,IplImage*dst,IplFilterfilter=IPL_GAUSSIAN_5x5);void cvThreshold(IplImage*src,IplImage*dst,float thresh,float maxvalue,CvThreshType type);void cvProject3D(CvPoint3D32f*points3D,int count,CvPoint2D32f* points2D,int xindx,int yindx);void cvFindFundamentalMatrix(int*points1,int*points2,int numpoints, int method,CvMatrix3*matrix);//很好用的平滑函数void cvSmooth(const CvArr*src,CvArr*dst,intsmoothtype=CV_GAUSSIAN,int param1=3,int param2=0,double param3=0); CV_BLUR_NO_SCALE CV_BLUR CV_GAUSSIAN CV_MEDIAN CV_BILATERAL其他辅助函数:void cvPutText(CvArr*img,const char*text,CvPoint org,const CvFont* font,CvScalar color);cvCvtColor(image,gray,CV_BGR2GRAY);//彩色图像灰度化cvCvtPlaneToPix(planes[0],planes[1],planes[2],0,currentimage); cvSplit(colorimage,plane[0],plane[1],plane[2],0);。

相关文档
最新文档