快速学习OPENCV常用函数
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基本使用方法一、介绍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提供了一些函数来实现坐标变换,包括平移、旋转、缩放和仿射变换等。
下面将逐个介绍这些函数的用法和作用。
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入门教程

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函数的汇总: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库函数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常用函数

01、cvL oad:矩阵读取;102、c vOpen FileS torag e:为读/写打开存储文件;103、cv Relea seFil eStor age:释放存储的数据;104、cvS tartW riteS truct:开始写入新的数据结构;105、cvE ndWri teStr uct:结束写入数据结构;106、cv Write Int:写入整数型;107、cvWri teRea l:写入浮点型;108、cv Write Strin g:写入字符型;109、cv Write Comme nt:写一个XML或YAML的注释字串;110、cvWri te:写一个对象;111、cvWr iteRa wData:写入多个数值;112、cv Write FileN ode:将文件节点写入另一个文件存储器;113、cvGet RootF ileNo de:获取存储器最顶层的节点;114、cvGet FileN odeBy Name:在映图或存储器中找到相应节点;115、cvGet Hashe dKey:为名称返回一个惟一的指针;116、cv GetFi leNod e:在映图或文件存储器中找到节点;117、cvG etFil eNode Name:返回文件的节点名;118、c vRead Int:读取一个无名称的整数型;119、cvRe adInt ByNam e:读取一个有名称的整数型;120、c vRead Real:读取一个无名称的浮点型;121、c vRead RealB yName:读取一个有名称的浮点型;122、cv ReadS tring:从文件节点中寻找字符串;123、cv ReadS tring ByNam e:找到一个有名称的文件节点并返回它;124、c vRead:将对象解码并返回它的指针;125、c vRead ByNam e:找到对象并解码;126、cvRea dRawD ata:读取多个数值;127、cvSt artRe adRaw Data:初始化文件节点序列的读取;128、cv ReadR awDat aSlic e:读取文件节点的内容;129、cvG etMod uleIn fo:检查IPP库是否已经正常安装并且检验运行是否正常;130、cv Resiz eWind ow:用来调整窗口的大小;131、cvSav eImag e:保存图像;132、cvM oveWi ndow:将窗口移动到其左上角为x,y的位置;133、cv Destr oyAll Windo w:用来关闭所有窗口并释放窗口相关的内存空间;134、cv GetTr ackba rPos:读取滑动条的值;135、cv SetTr ackba rPos:设置滑动条的值;136、cv GrabF rame:用于快速将视频帧读入内存;137、cv Retri eveFr ame:对读入帧做所有必须的处理;138、cvC onver tImag e:用于在常用的不同图像格式之间转换;139、c vErod e:形态腐蚀;140、cvD ilate:形态学膨胀;141、c vMorp holog yEx:更通用的形态学函数;142、c vFloo dFill:漫水填充算法,用来进一步控制哪些区域将被填充颜色;143、cvRe size:放大或缩小图像;144、cv PyrUp:图像金字塔,将现有的图像在每个维度上都放大两倍;145、cvPyr Segme ntati on:利用金字塔实现图像分割;146、cvThr eshol d:图像阈值化;147、cv Acc:可以将8位整数类型图像累加为浮点图像;148、cv Adapt iveTh resho ld:图像自适应阈值;149、cvFi lter2D:图像卷积;150、cvC opyMa keBor der:将特定的图像轻微变大,然后以各种方式自动填充图像边界;151、cvSo bel:图像边缘检测,Sobe l算子;152、c vLapl ace:拉普拉斯变换、图像边缘检测;153、cv Hough Lines2:霍夫直线变换;154、c vHoug hCirc les:霍夫圆变换;155、cvRem ap:图像重映射,校正标定图像,图像插值;156、cvWa rpAff ine:稠密仿射变换;157、cvGe tQuad rangl eSubP ix:仿射变换;158、cv GetAf fineT ransf orm:仿射映射矩阵的计算;159、c vClon eImag e:将整个IplIm age结构复制到新的IplIm age中;160、cv2DR otati onMat rix:仿射映射矩阵的计算;161、c vTran sform:稀疏仿射变换;162、cv WarpP erspe ctive:密集透视变换(单应性);163、cv GetPe rspec tiveT ransf orm:计算透视映射矩阵;164、cv Persp ectiv eTran sform:稀疏透视变换;165、cv CartT oPola r:将数值从笛卡尔空间到极坐标(极性空间)进行映射;166、cvPo larTo Cart:将数值从极性空间到笛卡尔空间进行映射;167、c vLogP olar:对数极坐标变换;168、cv DFT:离散傅里叶变换;169、cvM ulSpe ctrum s:频谱乘法;170、cvD CT:离散余弦变换;171、cvInt egral:计算积分图像;172、cv DistT ransf orm:图像的距离变换;173、cvE quali zeHis t:直方图均衡化;174、c vCrea teHis t:创建一新直方图;175、cvMak eHist Heade rForA rray:根据已给出的数据创建直方图;176、c vNorm alize Hist:归一化直方图;177、cvT hresh Hist:直方图阈值函数;178、cv CalcH ist:从图像中自动计算直方图;179、cvCo mpare Hist:用于对比两个直方图的相似度;180、c vCalc EMD2:陆地移动距离(EMD)算法;181、c vCalc BackP rojec t:反向投影;182、cvC alcBa ckPro jectP atch:图块的方向投影;183、cv Match Templ ate:模板匹配;184、c vCrea teMem Stora ge:用于创建一个内存存储器;185、cvCre ateSe q:创建序列;186、cvS eqInv ert:将序列进行逆序操作;187、c vCvtS eqToA rray:复制序列的全部或部分到一个连续内存数组中;188、cvFi ndCon tours:从二值图像中寻找轮廓;189、cvD rawCo ntour s:绘制轮廓;190、cvA pprox Poly:使用多边形逼近一个轮廓;191、cvC ontou rPeri meter:轮廓长度;192、cvCo ntour sMome nts:计算轮廓矩;193、cvMom ents:计算Hu不变矩;194、cv Match Shape s:使用矩进行匹配;195、cvIni tLine Itera tor:对任意直线上的像素进行采样;196、cv Sampl eLine:对直线采样;197、cvA bsDif f:帧差;198、cvWat ershe d:分水岭算法;199、cv Inpai nt:修补图像;200、cv GoodF eatur esToT rack:寻找角点;201、cvFin dCorn erSub Pix:用于发现亚像素精度的角点位置;202、c vCalc Optic alFlo wLK:实现非金字塔的Luca s-Kan ade稠密光流算法;203、cvMea nShif t:mea n-shi ft跟踪算法;204、cvC amShi ft:ca mshif t跟踪算法;205、cvCr eateK alman:创建Ka lman滤波器;206、cv Creat eConD ensat ion:创建cond ensat ion滤波器;207、cvC onver tPoin tsHom ogeni ous:对齐次坐标进行转换;208、c vFind Chess board Corne rs:定位棋盘角点;209、cvFin dHomo graph y:计算单应性矩阵;210、cvRod rigue s2:罗德里格斯变换;211、cvFi tLine:直线拟合算法;212、cv CalcC ovarM atrix:计算协方差矩阵;213、c vInve rt:计算协方差矩阵的逆矩阵;214、cvMah alano bis:计算Maha lanob is距离;215、cvKMe ans2:K均值;216、c vClon eMat:根据一个已有的矩阵创建一个新矩阵;217、cvP reCor nerDe tect:计算用于角点检测的特征图;218、cv GetIm age:C vMat图像数据格式转换成Ip lImag e图像数据格式;219、cv MatMu l:两矩阵相乘;。
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()函数返回两个值,⼀个是轮廓本⾝,还有⼀个是每条轮廓对应的属性。
OpenCV常用操作之计时、缩放、旋转、镜像

常用操作在OpenCV开发过程中用于测试性能计时的:计时(计算处理的时间)。
在一般的图像处理中有的几个操作:缩放(放大、缩小),旋转(90度的倍数)、镜像(x轴反向、y轴反向)。
注意:意角度的旋转使用cv::Mat不太合适,开发过程中会用到其他ui框架,所以使用其他ui框架做旋转是比较合适的。
计时函数OpenCV提供了两个渐变的计时函数:getTickCount()和getTickFrequency()。
getTickCount():getTickCount()函数返回CPU自某个事件(如启动电脑)以来走过的时钟周期数。
getTickFrequency():getTickFrequency()函数返回CPU一秒钟所走的时钟周期数。
测试结果如下:cv::getTickFrequency()获取的频率为10,000,000,得到cpu的周期为一千万次每秒。
访问图像中像素的三类方法cv::Mat访问的三类方法:方法一:at函数方法二:使用迭代器方法三:通过数据指针旋转(90度的整数倍)旋转90°的整数就是对矩阵位置进行变换,如下图:旋转函数1:cv::transpose()该函数无任何函数,直接对矩阵进行顺时钟旋转90°,函数原型如下:CV_EXPORTS_W void transpose(InputArray src, OutputArray dst);旋转函数2:cv::rotate()该函数旋转函数,三个枚举可以旋转90°,180°,270°,逆时针旋转90°就是顺时钟270°,函数原型如下:CV_EXPORTS_W void rotate(InputArray src, OutputArray dst, int rotateCode);参数一:输入mat参数二:输出mat参数三:旋转枚举,如下:enum RotateFlags {ROTATE_90_CLOCKWISE = 0, //Rotate 90 degrees clockwiseROTATE_180 = 1, //Rotate 180 degrees clockwiseROTATE_90_COUNTERCLOCKWISE = 2, //Rotate 270 degrees clockwise};代码示例:cv::rotate(srcMat, srcMat, cv::ROTATE_90_CLOCKWISE);镜像(x轴翻转,y轴翻转)镜像就是对X轴和Y轴的值翻转对调,如下图:翻转函数:cv::flip该函数为翻转函数,函数圆形如下:CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);参数一:输入mat参数二:输出mat参数三:只有3种值,小于0,等于0,大于0,分别对应xy轴翻转、x轴翻转、y轴翻转。
OPENCV库函数使用说明

OPENCV库函数使用说明
一、cv::Mat类介绍
cv::Mat类是OpenCV中最核心的基本数据结构,抽象代表一个n维矩阵,矩阵元素的矩阵可以是单通道浮点数,向量,多通道,可以是无符号字节,单精度浮点数以及双精度浮点数,并且支持多通道数据。
Mat类通过长度和宽度确定矩阵的大小,通过depth(函数可以得到它的深度,深度表示分量的类型。
Mat矩阵分为三种:关键的类型,普通的类型,宽字节类型,关键类型是由C++11语言提供的,主要用于简化mat 和其他类型的交互,它的性能比普通类型更好,但不支持所有类型;普通类型可以实现所有的功能,但是性能比关键类型要差;宽字节类型是在普通类型的基础上,支持访问1(uchar),2(ushort),4(uint)个字节长度的数据,它的性能比普通类型好。
二、cv::Mat函数使用
1.Mat类结构函数
一般来说,Mat类的结构函数主要有两种,分别是Mat()和Mat ({}),当我们只想创建一个空的Mat类时,可以使用Mat(),当想要创建一个8位单通道矩阵时,可以使用Mat({})。
2.Mat常用成员函数
(1)ptr():返回一个指向矩阵数据的指针;
(2)row():返回行数;
(3)cols():返回列数;。
opencv dilate用法

opencv dilate用法OpenCV中的dilate函数是图像处理中常用的膨胀操作。
膨胀是一种形态学操作,它可以用来增加图像中物体的大小,填充图像中的空洞,连接相邻的物体等。
下面我将从多个角度来解释OpenCV中dilate函数的用法。
1. 函数原型:dilate(src, dst, kernel, anchor, iterations, borderType, borderValue)。
src,输入图像,可以是灰度图像或彩色图像。
dst,输出图像,与输入图像具有相同的尺寸和深度。
kernel,用于膨胀操作的结构元素,控制膨胀的形状和大小。
anchor,结构元素的锚点位置,默认为(-1, -1),表示锚点位于结构元素中心。
iterations,膨胀操作的迭代次数,默认为1。
borderType,边界扩充的类型,默认为BORDER_CONSTANT。
borderValue,边界扩充的数值,默认为0。
2. 用法解释:dilate函数的作用是将图像中的物体进行膨胀操作,使其变大。
膨胀操作的效果取决于所使用的结构元素的形状和大小。
通常情况下,结构元素可以是矩形、圆形或者自定义形状。
膨胀操作会将结构元素覆盖区域内的像素值取最大值,从而使目标物体的边界变得更加平滑,填充空洞,连接相邻的物体。
3. 示例代码:python.import cv2。
import numpy as np.# 读取输入图像。
img = cv2.imread('input.jpg', 0)。
# 创建结构元素。
kernel = np.ones((5,5), np.uint8)。
# 执行膨胀操作。
dilated_img = cv2.dilate(img, kernel, iterations=1)。
# 显示结果。
cv2.imshow('Dilated Image', dilated_img)。
cv2.waitKey(0)。
OpenCV常用库函数

OpenCV常⽤库函数⼀、core模块1、Mat - 基本图像容器Mat 是⼀个类,由两个数据部分组成:矩阵头(包含矩阵尺⼨,存储⽅法,存储地址等信息)和⼀个指向存储所有像素值的矩阵(根据所选存储⽅法的不同矩阵可以是不同的维数)的指针。
创建Mat对象⽅法:11->Mat() 构造函数:2 Mat M(2,2, CV_8UC3, Scalar(0,0,255));3int sz[3] = {2,2,2};4 Mat L(3,sz, CV_8UC(1), Scalar::all(0));52->Create() function: 函数6 M.create(4,4, CV_8UC(2));73-> 初始化zeros(), ones(), :eyes()矩阵8 Mat E = Mat::eye(4, 4, CV_64F);9 Mat O = Mat::ones(2, 2, CV_32F);10 Mat Z = Mat::zeros(3,3, CV_8UC1);114->⽤逗号分隔的初始化函数:12 Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);常⽤操作:1 Mat A, C; // 只创建信息头部分2 A = imread(argv[1], CV_LOAD_IMAGE_COLOR); // 这⾥为矩阵开辟内存3 Mat B(A); // 使⽤拷贝构造函数4 C = A; // 赋值运算符5 Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle6 Mat E = A(Range:all(), Range(1,3)); // using row and column boundaries7 Mat F = A.clone();8 Mat G;9 A.copyTo(G); //使⽤函数 clone() 或者 copyTo() 来拷贝⼀副图像的矩阵。
opencv 基本仿射变换函数

opencv 基本仿射变换函数OpenCV是一个功能强大的开源计算机视觉库,可以使用该库在各种平台上构建基于计算机视觉的项目。
其中,仿射变换是OpenCV中的一项重要功能,可以被用于图像处理、计算机视觉等领域。
本篇文章将介绍基本的仿射变换函数及其原理。
仿射变换是一种线性变换,通过对原图像进行平移、旋转、缩放、错切等操作的组合,达到改变图像形状和位置的目的。
仿射变换可以被表示为一个二维矩阵,该矩阵包含多个变换参数,如平移量、旋转角度、缩放因子和错切参数。
OpenCV中的仿射变换函数主要有三个:cv2.getAffineTransform()、cv2.warpAffine()和cv2.transform()。
这些函数在分别实现的功能方面略有不同,下文将逐一介绍。
1. cv2.getAffineTransform(src, dst)该函数用于获得一个仿射变换矩阵,该矩阵可以被用于对图像进行仿射变换操作。
参数说明:src:一个包含三个点坐标的数组,表示原图像中的三个点。
这些点需要表示为三个二维坐标元组(x,y)。
dst:一个包含三个点坐标的数组,表示变换后的图像中对应的三个点,格式与src相同。
返回值:一个2*3的仿射变换矩阵,可以被用于cv2.warpAffine()函数中。
示例:import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('lenna.jpg')rows, cols, ch = img.shape#定义原图中的三个点src_points = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])#定义变换后的图像中的三个对应点dst_points = np.float32([[cols * 0.1, rows * 0.1], [cols * 0.9, rows * 0.2], [cols * 0.3, rows * 0.9]])#获得仿射变换矩阵M = cv2.getAffineTransform(src_points, dst_points)#对图像进行仿射变换dst = cv2.warpAffine(img, M, (cols, rows))#显示结果plt.subplot(121), plt.imshow(img), plt.title('Input')plt.subplot(122), plt.imshow(dst), plt.title('Output') plt.show()此处,我们先读入一张图片,并定义两组点作为src_points和dst_points参数,这两个参数将作为cv2.getAffineTransform()的输入。
图像处理和识别中常用的OpenCV函数

图像处理和图像识别中常用的OpenCV函数(2010-12-10 15:03:03)转载1、cvLoadImage:将图像文件加载至内存;2、cvNamedWindow:在屏幕上创建一个窗口;3、cvShowImage:在一个已创建好的窗口中显示图像;4、cvWaitKey:使程序暂停,等待用户触发一个按键操作;5、cvReleaseImage:释放图像文件所分配的内存;6、cvDestroyWindow:销毁显示图像文件的窗口;7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件;8、cvQueryFrame:用来将下一帧视频文件载入内存;9、cvReleaseCapture:释放CvCapture结构开辟的内存空间;10、cvCreateTrackbar:创建一个滚动条;11、cvSetCaptureProperty:设置CvCapture对象的各种属性;12、cvGetCaptureProperty:查询CvCapture对象的各种属性;13、cvGetSize:当前图像结构的大小;14、cvSmooth:对图像进行平滑处理;15、cvPyrDown:图像金字塔,降采样,图像缩小为原来四分之一;16、cvCanny:Canny边缘检测;17、cvCreateCameraCapture:从摄像设备中读入数据;18、cvCreateVideoWriter:创建一个写入设备以便逐帧将视频流写入视频文件;19、cvWriteFrame:逐帧将视频流写入文件;20、cvReleaseVideoWriter:释放CvVideoWriter结构开辟的内存空间;21、CV_MAT_ELEM:从矩阵中得到一个元素;22、cvAbs:计算数组中所有元素的绝对值;23、cvAbsDiff:计算两个数组差值的绝对值;24、cvAbsDiffS:计算数组和标量差值的绝对值;25、cvAdd:两个数组的元素级的加运算;26、cvAddS:一个数组和一个标量的元素级的相加运算;27、cvAddWeighted:两个数组的元素级的加权相加运算(alpha运算);28、cvAvg:计算数组中所有元素的平均值;29、cvAvgSdv:计算数组中所有元素的绝对值和标准差;30、cvCalcCovarMatrix:计算一组n维空间向量的协方差;31、cvCmp:对两个数组中的所有元素运用设置的比较操作;32、cvCmpS:对数组和标量运用设置的比较操作;33、cvConvertScale:用可选的缩放值转换数组元素类型;34、cvCopy:把数组中的值复制到另一个数组中;35、cvCountNonZero:计算数组中非0值的个数;36、cvCrossProduct:计算两个三维向量的向量积(叉积);37、cvCvtColor:将数组的通道从一个颜色空间转换另外一个颜色空间;38、cvDet:计算方阵的行列式;39、cvDiv:用另外一个数组对一个数组进行元素级的除法运算;40、cvDotProduct:计算两个向量的点积;41、cvEigenVV:计算方阵的特征值和特征向量;42、cvFlip:围绕选定轴翻转;43、cvGEMM:矩阵乘法;44、cvGetCol:从一个数组的列中复制元素;45、cvGetCols:从数据的相邻的多列中复制元素;46、cvGetDiag:复制数组中对角线上的所有元素;47、cvGetDims:返回数组的维数;48、cvGetDimSize:返回一个数组的所有维的大小;49、cvGetRow:从一个数组的行中复制元素值;50、cvGetRows:从一个数组的多个相邻的行中复制元素值;51、cvGetSize:得到二维的数组的尺寸,以CvSize返回;52、cvGetSubRect:从一个数组的子区域复制元素值;53、cvInRange:检查一个数组的元素是否在另外两个数组中的值的范围内;54、cvInRangeS:检查一个数组的元素的值是否在另外两个标量的范围内;55、cvInvert:求矩阵的逆;56、cvMahalonobis:计算两个向量间的马氏距离;57、cvMax:在两个数组中进行元素级的取最大值操作;58、cvMaxS:在一个数组和一个标量中进行元素级的取最大值操作;59、cvMerge:把几个单通道图像合并为一个多通道图像;60、cvMin:在两个数组中进行元素级的取最小值操作;61、cvMinS:在一个数组和一个标量中进行元素级的取最小值操作;62、cvMinMaxLoc:寻找数组中的最大最小值;63、cvMul:计算两个数组的元素级的乘积(点乘);64、cvNot:按位对数组中的每一个元素求反;65、cvNormalize:将数组中元素进行归一化;66、cvOr:对两个数组进行按位或操作;67、cvOrs:在数组与标量之间进行按位或操作;68、cvReduce:通过给定的操作符将二维数组简为向量;69、cvRepeat:以平铺的方式进行数组复制;70、cvSet:用给定值初始化数组;71、cvSetZero:将数组中所有元素初始化为0;72、cvSetIdentity:将数组中对角线上的元素设为1,其他置0;73、cvSolve:求出线性方程组的解;74、cvSplit:将多通道数组分割成多个单通道数组;75、cvSub:两个数组元素级的相减;76、cvSubS:元素级的从数组中减去标量;77、cvSubRS:元素级的从标量中减去数组;78、cvSum:对数组中的所有元素求和;79、cvSVD:二维矩阵的奇异值分解;80、cvSVBkSb:奇异值回代计算;81、cvTrace:计算矩阵迹;82、cvTranspose:矩阵的转置运算;83、cvXor:对两个数组进行按位异或操作;84、cvXorS:在数组和标量之间进行按位异或操作;85、cvZero:将所有数组中的元素置为0;86、cvConvertScaleAbs:计算可选的缩放值的绝对值之后再转换数组元素的类型;87、cvNorm:计算数组的绝对范数,绝对差分范数或者相对差分范数;88、cvAnd:对两个数组进行按位与操作;89、cvAndS:在数组和标量之间进行按位与操作;90、cvScale:是cvConvertScale的一个宏,可以用来重新调整数组的内容,并且可以将参数从一种数据类型转换为另一种;91、cvT:是函数cvTranspose的缩写;92、cvLine:画直线;93、cvRectangle:画矩形;94、cvCircle:画圆;95、cvEllipse:画椭圆;96、cvEllipseBox:使用外接矩形描述椭圆;97、cvFillPoly、cvFillConvexPoly、cvPolyLine:画多边形;98、cvPutText:在图像上输出一些文本;99、cvInitFont:采用一组参数配置一些用于屏幕输出的基本个特定字体;100、cvSave:矩阵保存;101、cvLoad:矩阵读取;102、cvOpenFileStorage:为读/写打开存储文件;103、cvReleaseFileStorage:释放存储的数据;104、cvStartWriteStruct:开始写入新的数据结构;105、cvEndWriteStruct:结束写入数据结构;106、cvWriteInt:写入整数型;107、cvWriteReal:写入浮点型;108、cvWriteString:写入字符型;109、cvWriteComment:写一个XML或YAML的注释字串;110、cvWrite:写一个对象;111、cvWriteRawData:写入多个数值;112、cvWriteFileNode:将文件节点写入另一个文件存储器;113、cvGetRootFileNode:获取存储器最顶层的节点;114、cvGetFileNodeByName:在映图或存储器中找到相应节点;115、cvGetHashedKey:为名称返回一个惟一的指针;116、cvGetFileNode:在映图或文件存储器中找到节点;117、cvGetFileNodeName:返回文件的节点名;118、cvReadInt:读取一个无名称的整数型;119、cvReadIntByName:读取一个有名称的整数型;120、cvReadReal:读取一个无名称的浮点型;121、cvReadRealByName:读取一个有名称的浮点型;122、cvReadString:从文件节点中寻找字符串;123、cvReadStringByName:找到一个有名称的文件节点并返回它;124、cvRead:将对象解码并返回它的指针;125、cvReadByName:找到对象并解码;126、cvReadRawData:读取多个数值;127、cvStartReadRawData:初始化文件节点序列的读取;128、cvReadRawDataSlice:读取文件节点的内容;129、cvGetModuleInfo:检查IPP库是否已经正常安装并且检验运行是否正常;130、cvResizeWindow:用来调整窗口的大小;131、cvSaveImage:保存图像;132、cvMoveWindow:将窗口移动到其左上角为x,y的位置;133、cvDestroyAllWindow:用来关闭所有窗口并释放窗口相关的内存空间;134、cvGetTrackbarPos:读取滑动条的值;135、cvSetTrackbarPos:设置滑动条的值;136、cvGrabFrame:用于快速将视频帧读入内存;137、cvRetrieveFrame:对读入帧做所有必须的处理;138、cvConvertImage:用于在常用的不同图像格式之间转换;139、cvErode:形态腐蚀;140、cvDilate:形态学膨胀;141、cvMorphologyEx:更通用的形态学函数;142、cvFloodFill:漫水填充算法,用来进一步控制哪些区域将被填充颜色;143、cvResize:放大或缩小图像;144、cvPyrUp:图像金字塔,将现有的图像在每个维度上都放大两倍;145、cvPyrSegmentation:利用金字塔实现图像分割;146、cvThreshold:图像阈值化;147、cvAcc:可以将8位整数类型图像累加为浮点图像;148、cvAdaptiveThreshold:图像自适应阈值;149、cvFilter2D:图像卷积;150、cvCopyMakeBorder:将特定的图像轻微变大,然后以各种方式自动填充图像边界;151、cvSobel:图像边缘检测,Sobel算子;152、cvLaplace:拉普拉斯变换、图像边缘检测;153、cvHoughLines2:霍夫直线变换;154、cvHoughCircles:霍夫圆变换;155、cvRemap:图像重映射,校正标定图像,图像插值;156、cvWarpAffine:稠密仿射变换;157、cvGetQuadrangleSubPix:仿射变换;158、cvGetAffineTransform:仿射映射矩阵的计算;159、cvCloneImage:将整个IplImage结构复制到新的IplImage中;160、cv2DRotationMatrix:仿射映射矩阵的计算;161、cvTransform:稀疏仿射变换;162、cvWarpPerspective:密集透视变换(单应性);163、cvGetPerspectiveTransform:计算透视映射矩阵;164、cvPerspectiveTransform:稀疏透视变换;165、cvCartToPolar:将数值从笛卡尔空间到极坐标(极性空间)进行映射;166、cvPolarToCart:将数值从极性空间到笛卡尔空间进行映射;167、cvLogPolar:对数极坐标变换;168、cvDFT:离散傅里叶变换;169、cvMulSpectrums:频谱乘法;170、cvDCT:离散余弦变换;171、cvIntegral:计算积分图像;172、cvDistTransform:图像的距离变换;173、cvEqualizeHist:直方图均衡化;174、cvCreateHist:创建一新直方图;175、cvMakeHistHeaderForArray:根据已给出的数据创建直方图;176、cvNormalizeHist:归一化直方图;177、cvThreshHist:直方图阈值函数;178、cvCalcHist:从图像中自动计算直方图;179、cvCompareHist:用于对比两个直方图的相似度;180、cvCalcEMD2:陆地移动距离(EMD)算法;181、cvCalcBackProject:反向投影;182、cvCalcBackProjectPatch:图块的方向投影;183、cvMatchTemplate:模板匹配;184、cvCreateMemStorage:用于创建一个内存存储器;185、cvCreateSeq:创建序列;186、cvSeqInvert:将序列进行逆序操作;187、cvCvtSeqToArray:复制序列的全部或部分到一个连续内存数组中;188、cvFindContours:从二值图像中寻找轮廓;189、cvDrawContours:绘制轮廓;190、cvApproxPoly:使用多边形逼近一个轮廓;191、cvContourPerimeter:轮廓长度;192、cvContoursMoments:计算轮廓矩;193、cvMoments:计算Hu不变矩;194、cvMatchShapes:使用矩进行匹配;195、cvInitLineIterator:对任意直线上的像素进行采样;196、cvSampleLine:对直线采样;197、cvAbsDiff:帧差;198、cvWatershed:分水岭算法;199、cvInpaint:修补图像;200、cvGoodFeaturesToTrack:寻找角点;201、cvFindCornerSubPix:用于发现亚像素精度的角点位置;202、cvCalcOpticalFlowLK:实现非金字塔的Lucas-Kanade稠密光流算法;203、cvMeanShift:mean-shift跟踪算法;204、cvCamShift:camshift跟踪算法;205、cvCreateKalman:创建Kalman滤波器;206、cvCreateConDensation:创建condensation滤波器;207、cvConvertPointsHomogenious:对齐次坐标进行转换;208、cvFindChessboardCorners:定位棋盘角点;209、cvFindHomography:计算单应性矩阵;210、cvRodrigues2:罗德里格斯变换;211、cvFitLine:直线拟合算法;212、cvCalcCovarMatrix:计算协方差矩阵;213、cvInvert:计算协方差矩阵的逆矩阵;214、cvMahalanobis:计算Mahalanobis距离;215、cvKMeans2:K均值;216、cvCloneMat:根据一个已有的矩阵创建一个新矩阵;217、cvPreCornerDetect:计算用于角点检测的特征图;218、cvGetImage:CvMat图像数据格式转换成IplImage图像数据格式;219、cvMatMul:两矩阵相乘;。
opencv size函数

opencv size函数OpenCV是一个非常流行的开源计算机视觉库,广泛应用于计算机视觉、机器学习和人工智能领域。
其中,size函数是一个用于获取图像、矩阵或序列的大小信息的非常重要的函数。
使用OpenCV中的size函数有两种常用的方式:1.使用Mat类中的size函数获取图像大小信息。
Mat是OpenCV中一个非常常用的类,表示一个多维数组。
在获取图像大小信息时,我们可以使用Mat类的size()函数。
该函数返回一个Size类型的对象,包含了行数和列数的信息。
例如:```Mat image = imread("image.jpg");Size size = image.size();cout << "image size: " << size.width << "x" << size.height << endl;```在这个例子中,我们首先使用imread函数从文件中读取一张图像,并将其保存在Mat类的对象image中。
然后,我们使用Mat类的size()函数获取image的大小信息,并将其保存在一个Size类型的对象中。
最后,我们将图像的大小信息输出到控制台。
2.使用vector类中的size函数获取序列长度信息。
OpenCV中的vector类是另一个非常常用的类,表示一个动态数组。
在获取序列长度信息时,我们可以使用vector类的size()函数。
该函数返回一个整型值,表示序列的长度。
例如:```vector<int> sequence = {1, 2, 3, 4, 5};int size = sequence.size();cout << "sequence size: " << size << endl;```在这个例子中,我们首先创建一个包含五个整数的vector对象sequence。
opencv学习笔记——图像缩放函数resize

opencv学习笔记——图像缩放函数resizeopencv提供了⼀种图像缩放函数功能:实现对输⼊图像缩放到指定⼤⼩函数原型:void cv::resize ( InputArray src,OutputArray dst,Size dsize,double fx = 0,double fy = 0,int interpolation = INTER_LINEAR)函数参数:InputArray src:输⼊图像,可以是Mat类型OutputArray dst:输出图像,其尺⼨由第三个参数dsize(如果dsize不为0),当dsize为0,输出图像的尺⼨由src.size()、fx和fy计算得到,但是输出图像类型与输⼊图像⼀致Size dsize:输出图像的尺⼨,如果dsize设置为0,则dsize的值将由下式计算得到dsize=Size(round(fx*src.cols), round(fy*src.rows))需要注意的是dsize和fx、fy不能同时为0. double fx = 0: ⽔平⽅向上的缩放系数,当fx为0时,将由如下公式计算得到(double)dsize.width/src.cols. double fy = 0: 垂直⽅向上的缩放系数,如果fy为0,将由如下公式计算得到(double)dsize.height/src.rows. int interpolation=INTER_LINEAR: 图像缩放的插值算法类型,默认是INTER_LINEAR(线性插值),在opencv3.2中通过查看InterpolationFlags查看详细信息,可选的插值⽅式如下:以上的情况是没有初始化⽬标图像的类型和尺⼨也就是没有提前设置好⽬标图像的类型和尺⼨⽽是由函数根据size.size,dsize,fx和fy计算得到,如果想调整输⼊图像适应已经创建好的⽬标图像的时候应该这样调⽤resize()函数:resize(src, dst, dst.size(), 0, 0, interpolation);如果指定图像在⽔平⽅向和垂直⽅向的缩放系数,则调⽤⽅式如下:resize(src, dst, Size(), 0.5, 0.5, interpolation);例⼦:/**程序主要演⽰了不同的插值算法在图像缩放中效果不同*其中图像放⼤图像原图像⽤的是缩⼩后的图像*也可以将g_shrinkImage改为g_srcImage观察直接从原图像放⼤效果*/#include <iostream>#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>#include <opencv2/imgproc.hpp>using namespace std;using namespace cv;//定义全局变量Mat g_srcImage;Mat g_shrinkImage;Mat g_enlargeImage;//定义轨迹条属性const int resizeTypeMaxValue = 4; //共⼋种插值运算类型int resizeTypeValue = 0;//声明类型转换函数int typeDef(int typeNum);//声明回调函数void shrinkFun(int, void*);void enlargeFun(int, void*);int main(){g_srcImage = imread("resize.jpg");//判断⽂件是否加载成功if(!g_srcImage.data){cout << "图像加载失败!" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;namedWindow("原图像", WINDOW_AUTOSIZE);imshow("原图像", g_srcImage);//轨迹条属性char resizeTypeName[20];sprintf(resizeTypeName, "插值运算类型 %d", resizeTypeMaxValue);namedWindow("图像缩⼩", WINDOW_AUTOSIZE);namedWindow("图像放⼤", WINDOW_AUTOSIZE);//创建轨迹条createTrackbar(resizeTypeName, "图像缩⼩", &resizeTypeValue, resizeTypeMaxValue, shrinkFun); shrinkFun(resizeTypeValue, 0);createTrackbar(resizeTypeName, "图像放⼤", &resizeTypeValue, resizeTypeMaxValue, enlargeFun); enlargeFun(resizeTypeValue, 0);waitKey(0);return0;}int typeDef(int typeNum){int type;switch(typeNum){case0:type = INTER_NEAREST; break;case1:type = INTER_LINEAR; break;case2:type = INTER_CUBIC; break;case3:type = INTER_AREA; break;case4:type = INTER_LANCZOS4; break;default:break;}return type;}//图像缩⼩函数void shrinkFun(int, void*){int shrinkType;shrinkType = typeDef(resizeTypeValue);resize(g_srcImage, g_shrinkImage, Size(g_srcImage.cols/2, g_srcImage.rows/2), 0, 0, shrinkType);imshow("图像缩⼩", g_shrinkImage);}//图像放⼤函数void enlargeFun(int, void*){int enlargeType;enlargeType = typeDef(resizeTypeValue);resize(g_shrinkImage, g_enlargeImage, Size(g_shrinkImage.cols*2, g_shrinkImage.rows*2), 0, 0, enlargeType); imshow("图像放⼤", g_enlargeImage);}。
Opencv学习笔记blobFromImage函数、forward函数

Opencv学习笔记blobFromImage函数、forward函数官网以及网上对blobFromImage函数、forward函数讲解的很详细,但是对于输出的结果几乎没有介绍,所以很多时候再对于输出之后怎么处理让人比较困惑。
blobFromImage函数原型1.blobFromImage(InputArray image,2.double scalefactor=1.0,3.const Size& size = Size(),4.const Scalar& mean = Scalar(),5.bool swapRB = false,6.bool crop = false,7.int ddepth = CV_32F)image:这个就是我们将要输入神经网络进行处理或者分类的图片。
mean:需要将图片整体减去的平均值,如果我们需要对RGB图片的三个通道分别减去不同的值,那么可以使用3组平均值,如果只使用一组,那么就默认对三个通道减去一样的值。
减去平均值(mean):为了消除同一场景下不同光照的图片,对我们最终的分类或者神经网络的影响,我们常常对图片的R、G、B通道的像素求一个平均值,然后将每个像素值减去我们的平均值,这样就可以得到像素之间的相对值,就可以排除光照的影响。
scalefactor:当我们将图片减去平均值之后,还可以对剩下的像素值进行一定的尺度缩放,它的默认值是1,如果希望减去平均像素之后的值,全部缩小一半,那么可以将scalefactor设为1/2。
size:这个参数是我们神经网络在训练的时候要求输入的图片尺寸。
swapRB:OpenCV中认为我们的图片通道顺序是BGR,但是我平均值假设的顺序是RGB,所以如果需要交换R和G,那么就要使swapRB=true函数内的参数需要根据你训练的网络的相关参数调整。
blobFromImage函数输出函数返回4D矩阵(没有定义行/列值,因此这些值为-1)。
opencv常用函数

opencv常用函数OpenCV是一款开源的计算机视觉库,其中提供了许多常用的函数,可以用于图像处理,机器视觉等领域。
下面就介绍一些OpenCV中常用的函数:1.cv::Mat函数:它是OpenCV中最常用的函数,用于表示图像的像素信息。
它是一种多维数组,可以用来存放像素值。
2.cv::imread函数:它用于读取图像文件,并将其转换成cv::Mat格式的对象。
3.cv::imshow函数:它用于将读取的图像显示出来,以便可以查看其内容。
4.cv::cvtColor函数:它用于将图像从一种颜色空间转换到另一种颜色空间,例如从灰度图像转换为彩色图像。
5.cv::GaussianBlur函数:它用于对图像进行高斯模糊处理,可以有效地去除噪声,平滑图像。
6.cv::Sobel函数:它用于实现Sobel算子,用于检测图像中的边缘。
7.cv::threshold函数:它用于将图像中的像素值转换为二值图像,以便更容易识别图像中的物体。
8.cv::findContours函数:它用于在二值图像中查找轮廓,可以用于物体检测和跟踪。
9.cv::HoughLines函数:它用于检测图像中的直线,可以用于检测图像中的线条。
10.cv::calcHist函数:它用于计算图像的直方图,以便可以更好地了解图像的特征。
11.cv::kmeans函数:它用于对图像进行聚类,可以将图像分割成不同的区域,以便进行进一步的处理。
12.cv::rectangle函数:它用于在图像中画出矩形,可以用于标注图像中的物体,或者实现图像裁剪。
以上就是OpenCV中常用的一些函数,它们可以帮助我们快速实现一些复杂的图像处理任务。
opencv函数imshow的用法

opencv函数imshow的用法OpenCV是一个开源的计算机视觉库,提供了许多强大的函数和工具来处理图像和视频数据。
其中一个常用的函数是imshow,它用于在窗口中显示图像。
imshow函数的基本语法是:```cv2.imshow(window_name, image)```其中,window_name是要显示的窗口的名称,image是要显示的图像数据。
在使用imshow函数之前,我们需要先创建一个窗口,可以使用dWindow函数来指定窗口的名称:```dWindow(window_name)```接下来,我们可以使用imshow函数显示图像:```cv2.imshow(window_name, image)```需要注意的是,imshow函数并不会直接将图像显示出来,而是将图像数据加载到指定的窗口中。
为了确保图像能够显示出来,我们需要调用cv2.waitKey函数等待用户操作,如按下任意键或等待一定的时间:```cv2.waitKey(delay)```其中,delay是等待时间(以毫秒为单位),如果设置为0,则会等待用户按下任意键。
完成图像显示后,我们需要释放窗口和图像资源,可以使用cv2.destroyAllWindows函数来关闭所有窗口:```cv2.destroyAllWindows()```总结一下,imshow函数是OpenCV中用于显示图像的函数。
它的基本用法包括创建窗口、加载图像数据到窗口中、等待用户操作以及释放窗口和图像资源。
通过合理的使用imshow函数,我们可以方便地进行图像展示和调试操作。
希望这篇文章对你理解opencv函数imshow的用法有所帮助!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);。