EmguCV类(CvInvoke_Class) 方法整理
图像处理编程总结

EmguCV编程总结学习C#图像处理编程有一段时间了,然后写写自己的已经积累的经验,网上有关于C#数字图像处理的资料很少,教程方面,专门为C#数字图像处理的到目前为止我就看到了三本,这三本的内容都是利用GDI+来做图像处理的。
GDI+为我们提供了图像处理所需要的一些类,还有一些函数。
在结合C#做界面的优势,因此做图像处理我个人感觉要比c++和opencv方便,opencv中有强大的算法,但是就是这个界面不友好。
在GDI+中只是提供了图像处理的类,还有少量的函数,如果真正要做处理,大量的函数还是的需要自己编写,我看到的这三本书上讲的基本上都是编写这些函数的内容,在GDI+编程中对图像处理通常有三种方式,第一种是利用纯C#的方式,理解简单,但是效率差。
第二种是内存法,理解稍微困难点,但是效率比纯C#的要高几百倍。
第三种就是在C#下利用指针了,当然利用指针就是效率最高的了,比内存法都要效率高,但是指针的理解比较困难,如果退指针理解还可以,就推荐用这种方法。
在前面的文章中我对比过在C#中用这三种方式灰度化图像的运行效率对比,还给出了具体时间。
我看到的这三本C#图像处理的书上,其中一本的算法是按照内存法来写的,其他两本上的算法都是按照纯C#方法写的,效率令人堪忧。
当然还有一些关于GDI+的书籍,这上面就介绍的内容就不单单是图像方面的处理了,还包括其他方面的内容,这是对学软件计算机的人看的,我们了解下就可以,再说,上面处理的方式都是纯C#的方式处理的,对我们图像处理来说效率实在不好,所以看看就好。
因此,C#图像处理的话,我推荐的是指针的方法,效率最好,速度快。
这是我们直接用C#来图像处理,当然大多数算法还得自己编写程序,反正我看到的教材上都是这样教的,但是实际中,我们写大量成熟的算法是很花时间的,估计写完这些都花个好几年时间了,因此,我们还得需要一些计算机视觉处理的库,调用其中的函数完成主要的处理功能。
有本名字叫《EmguCV Essentials》的书上就对现在常见的库做了对比,这本书上对比了有三种计算机视觉库,有opencv,EmguCV,这三种库。
EmguCV耦合视觉引导的图像目标定位与补偿技术研究

EmguCV耦合视觉引导的图像目标定位与补偿技术研究王帮元【摘要】在平板电脑组装过程中,需要对背光板进行整体定位,传送给机械机构进行位移和角度补偿,从而实现精准组装.但由于背光板顶点背景复杂,往往存在很多干扰点,使得当前图像角点定位算法定位不准,易产生误差.对此提出了一个基于EmguCV与视觉引导的目标定位与引导机制.首先打通Basler SDK与C#-Emgucv 平台的数据通道,实现图像采集;然后基于轮廓,查找到背光板区域,再通过最小矩形框定背光板,查找背光板顶点,实现定位;最后计算出水平、垂直方向偏移和旋转角度,联合PLC,实现基于视觉引导的机构补偿.测试定位补偿技术的性能结果表明:与当前图像角点定位算法相比,机制具有更好的定位与引导效果,准确定位出背光板顶点,计算出补偿值.【期刊名称】《湖北民族学院学报(自然科学版)》【年(卷),期】2015(033)001【总页数】5页(P43-47)【关键词】图像定位;背光板;视觉引导;EmguCV;最小矩形;机构补偿【作者】王帮元【作者单位】安徽经济管理学院信息工程系,安徽合肥230051【正文语种】中文【中图分类】TP391随着电子行业产业化的推进,机器视觉技术在该领域内得到广泛应用,并且已在很大程度上推动了行业生产力发展[1-3].机器视觉的作用主要有:视觉引导、缺陷检测等[4-6],其中的目标定位是视觉引导的关键,也是前提,尤其是角点定位.在平板电脑自动组装中,电脑零部件背光板的位置经常需要传递给机器人的机械手臂,实现精准抓取.因此,对背光板顶点的准确定位直接影响到产品的质量和效率.对此,已有部分学者设计了相应的角点目标定位算法,并且达到了一定的效果.如利用梯度均方差进行特征分析后提取角点的定位算法[7].还有利用局部图像区域直方图特性定位角点的定位算法.这些算法的实验结果表明其具有良好的视觉定位效果[8].尽管上述这些角点定位机制能够取得较好的效果;但是当目标存在干扰时,这些算法的定位精度较低,存在明显的定位偏差.对此,本文提出了一个基于Emgucv 与视觉引导的定位机制.首先打通相机SDK 与C#-Emgucv 平台的数据通道,实现图像采集;然后基于轮廓匹配得到背光板区域,再通过最小矩形框定背光板后查找背光板顶点,实现定位.最后计算出水平、垂直方向偏移和旋转角度,实现基于视觉引导的机构补偿.最后通过实验,验证了本文算法与传统定位算法的定位性能.1 本文整体定位与引导机制由于一块反光板上有三个顶点需要定位,因此本文机制采用2 个摄像头分2 次抓取三个顶点所在视野,然后分别定位.考虑到C#在界面、运行效率、通信方面比较有优势,故选用C#语言开发软件系统,且在C#平台上调用Emgucv 也很方便.首先研究相机C#版本的SDK 底层函数,然后用C#进行调取,并且转换为bitmap、Emgucv 图像格式,实现相机取像、实时动态显示功能.反光板上目标是三个顶点,如图1 所示.通过定位反光板上三个顶点来确定位置信息.取像完成后,首先对采集的目标区域进行轮廓查找,得到目标区域;再通过最小矩形框定得到目标的精确坐标;然后查找目标顶点;最后引入补偿计算模型,实现位移和角度补偿.以上过程采用C#平台与EmguCV 来实现.本文机制整体框架如图2 所示.图1 反光板Fig.1 Backlight board图2 本文定位与引导机制架构Fig.2 Positioning and visual guiding system architecture in this paper2 基于相机SDK 数据转换的图像采集首先基于相机C#版本SDK 进行二次开发,用C#语言编程调用SDK 底层相机采集函数,取出相机采集的图像裸数据,即二进制数据.然后,利用字节流转换的方法,将图像裸数据转换至C#支持的Bitmap 格式数据.最后利用索引调色板重构方式,转换到Emgucv 数据格式Image <>.由此得到PC-visual stadio 平台可以处理的数据格式,从而通过C#编程实现两个工业相机的数据采集,为图像处理打下数据基础.实时显示视频如图4 所示.通过C#调用SDK,将相机采集的图像裸数据,转换为C#可以识别的数据流,继而转换为Bitmap 格式.由于索引图像格式存在伪彩,本研究采用索引表重构[11],转换Emgucv 平台图像数据格式Image,如图3 所示,为后续图像处理、定位打好数据基础.图3 数据采集与转换流程Fig.3 Data acquisition and conversion process相机初始化部分代码:相机SDK—C#-Emgucv 平台数据转换部分代码:图4 本文双目视觉效果图Fig.4 Effect of double vision in this paper3 基于Emgucv 的顶点目标定位基于阈值分割和轮廓查找得到可能包含目标点区域,再利用Emgucv 的最小矩形框定函数cvMinAreaRect2,得到可能包含目标点的最小外接矩形区域,再通过查找顶点,得到顶点坐标;随后,与标准坐标相减后得到位置偏移和角度旋转.基于式(1)计算,得到X 轴、Y 轴补偿和角度补偿,即测量值与标准值得差值表示位移偏差和角度偏差.整体框架如图5 所示.采用轮廓查找,定位出目标.图5 定位算法Fig.5 The positioning algorithm式(1)中,x、y 为实际坐标,Standard_x、Standard_y 为标准坐标,Delt_X、Delt_Y 为X、Y 轴偏移.Juli 为两顶点距离,Jiaodu 为旋转角度;Real_distance为两点实际距离,Pixel_distance 为两点像素距离,Bili 为图像距离到实际距离的转换比例.以图6 为待定位图像,经本文定位机制处理后,结果见图7.从图7 中可知,本文定位机制精确识别出角点.可见定位标示绿点准确的打在顶点上,代表定位成功.进而计算出水平、垂直、角度补偿,如图8 所示.图8 为软件界面部分截图,是补偿计算显示.图6 原图Fig.6 The original image图7 处理效果图Fig.7 Processing result image图8 补偿计算显示Fig.8 Display of compensation calculation背光板顶点定位部分代码:4 基于视觉引导的机构补偿计算出位移和角度的补偿值后,本文利用PLC 实现位移、角度补偿.视觉软件完成对背光板X 轴、Y 轴位移偏移、旋转角度,即X 轴、Y 轴、角度补偿,软件通过串口通信将这些值传递给PLC 机构,PLC 转换为相应的动作.比如X 轴偏移-4 mm,PLC 步进电机X 轴方向多走4 mm,X 轴偏移4 mm,PLC 步进电机X 轴方向少走4 mm,Y 轴偏移-4 mm,PLC 步进电机Y 轴方向多走4 mm,Y 轴偏移4 mm,PLC 步进电机Y 轴方向少走4 mm,角度偏移-4°,PLC 旋转电机逆时针旋转4°,角度偏移4°,PLC 旋转电机顺时针旋转4°.PLC 即可编程逻辑控制器,它采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程.当可编程逻辑控制器投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段.完成上述三个阶段称作一个扫描周期.在整个运行期间,可编程逻辑控制器的CPU 以一定的扫描速度重复执行上述三个阶段.部分PLC 关键代码:5 实验与讨论本文定位与引导机制,基于C#、EmguCV 编程完成对目标视野的取像,通过阈值分割、轮廓匹配、最小矩形框定、顶点查找得到目标的精确坐标.经过实验验证,在图像目标特征不明显,准确定位目标位置,如图9~10 所示.传统定位方式是基于静态大差异特征识别定位算法,在图像目标特征不明显,且背景复杂时,往往存在定位不准确,如图11~12 所示.图9 本文算法效果图Fig.9 Algorithm effect in this paper图10 本文算法效果图Fig.10 Algorithm effect in this paper图11 传统算法效果图Fig.11 Effect of the traditional algorithm随后,对十枚背光板进行检测,先用精密光学距离测量工具测算出实际物理偏移;然后分别用传统算法和本文算法测试,计算出偏移,然后综合取平均值后,结果见表1.从表中可知,本文算法的定位精度比传统技术要高,定位偏移非常小;而传统的角点定位技术产生了较大的偏移.图12 传统算法效果图Fig.12 Effect of the traditional algorithm表1 测试数据表Tab.1 Table of data testing名称实际物理偏移传统算法计算偏移本文算法计算偏移X 方向 3.0 2.0 3.00 Y 方向 5.0 1.0 4.90角度2.3 3.1 2.356 结论为了解决反光板顶点目标的定位问题,本文提出了一个基于EmguCV 与双目视觉的定位与引导机制.首先基于两个Basler 工业相机实现图像采集;然后基于轮廓查找与阈值分割处理得到目标的大致区域,再通过最小矩形框定和顶点查找得到目标的精确坐标.最后引入补偿计算机制,实现机构补偿.最后测试了本文机制性能,结果表明:与普通的图像目标定位算法相比,在图像目标特征背景复杂时,本文机制具有更好的定位与引导效果,准确定位出图像目标的坐标,并完成定位.参考文献:[1]王忠勇.一种并联机械手视觉引导算法[J].计算机测量与控制,2013,13(17):4983-4986.[2]李龙.结构光视觉引导的轨迹跟踪系统的标定技术[J].计算机工程与应用,2013,18(11):383-387.[3]赵丹阳.火灾视频图像定位中特征点提取和匹配[J].计算机工程与应用,2013,36(4):181-185.[4]聂华.基于计算机图像定位的伺服平台研究[J].电子设计工程,2013,21(7):1906-1913.[5]李翀伦.复杂背景下红外图像目标的快速定位[J].海军工程大学学报,2013,33(10):2886-2890.[6]秦绪佳,桑贤生,程时伟.改进的规范化卷积图像修复算法[J].计算机辅助设计与图形学学报,2011,23(2):371-376.[7] Noori H,Saryazdi S.A bilateral image inpainting[J].IJST Trans Electr Eng,2011,25(E2):95-108.[9]李虹.基于符号理据性的视觉引导系统设计研究[J].统计与管理,2014,18(15):482-4387.[10] hmann J E,Appas T P,Neuhoff D.Structure texture similarity metrics for image analysis and retrieval[J].IEEE Transactions,2013,22(7):2545-2258.[11]龙水军.基于彩色轨迹引导的AGV 视觉导航方案研究[J].工具技术,2014,18(15):42-47.[12]王秀平.基于激光视觉引导的焊接机器人系统设计[J].煤炭技术,2013,21(7):906-913.。
EmguCV类(CvInvoke_Class) 方法整理

规范化输入数组
Randn(IInputOutputArray, IInputArray, IInputArray)
用正态分布的随机数填充数组
Randn(IInputOutputArray, MCvScalar, MCvScalar)
用正态分布的随机数填充数组
RandShuffle
将原数组(矩阵)打乱
用于标定立体相机
StereoRectify
计算每个摄像机的旋转矩阵(虚拟地)使两个摄像机图像平面处于相同的平面。
StereoRectifyUncalibrated
在不知道摄像头的固有参数和它们在空间的相对位置计算校正变换
方法
CalibrateCamera(IInputArray, IInputArray, Size, IInputOutputArray, IInputOutputArray, IOutputArray, IOutputArray, CalibType, MCvTermCriteria)
cvGetRawData
以低级别信息填充输出变量。
cvGetRow
返回头文件信息,对应于输入数组的指定行。
cvGetRows
返回头文件信息,对应输入数组的指定行跨度。
cvGetSubRect
返回头文件,对应于输入数组的指定矩形。换句话说,它允许用户将输入阵列的一部分视为独立阵列。通过还可提取ROI的子阵列。
计算源数据的加权平均和,使得acc变为帧序列的运行平均值(Calculates weighted sum of input src and the accumulator acc so that acc becomes a running average of frame sequence: acc(x,y)=(1-alpha) * acc(x,y) + alpha * image(x,y) if mask(x,y)!=0 where alpha regulates update speed (how fastaccumulator forgets about previous frames).
EmguCV图像处理函数

Opencv函数Emgucv函数作用cvLoadImage Cvinvoke.cvLoadImage将图像文件加载至内存cvNamedWindow Cvinvoke.cvNamedWindow在屏幕上创建一个窗口cvShowImage Cvinvoke.cvShowImage在一个已创建好的窗口中显示图像cvWaitKey Cvinvoke.cvWaitKey使程序暂停,等待用户触发一个按键操作cvReleaseImage Cvinvoke.cvReleaseImage释放图像文件所分配的内存cvDestroyWindow Cvinvoke.cvDestroyWindow销毁显示图像文件的窗口cvQueryFrame Cvinvoke.cvQueryFrame用来将下一帧视频文件载入内存cvReleaseCapture Cvinvoke.cvReleaseCapture释放CvCapture结构开辟的内存空间cvCreateTrackbar Cvinvoke.cvCreateTrackbar创建一个滚动条cvSetCaptureProperty Cvinvoke.cvSetCaptureProperty设置CvCapture对象的各种属性cvGetCaptureProperty Cvinvoke.cvGetCaptureProperty查询CvCapture对象的各种属性cvGetSize Cvinvoke.cvGetSize当前图像结构的大小cvSmooth Cvinvoke.cvSmooth对图像进行平滑处理cvPyrDown Cvinvoke.cvPyrDown图像金字塔,降采样,图像缩小为原来四分之一cvCanny:Canny Cvinvoke.cvCanny:Canny边缘检测cvCreateCameraCapture Cvinvoke.cvCreateCameraCapture从摄像设备中读入数据cvCreateVideoWriter Cvinvoke.cvCreateVideoWriter创建一个写入设备以便逐帧将视频流写入视频文件cvWriteFrame Cvinvoke.cvWriteFrame逐帧将视频流写入文件cvReleaseVideoWriter Cvinvoke.cvReleaseVideoWriter释放CvVideoWriter结构开辟的内存空间CV_MAT_ELEM Cvinvoke.CV_MAT_ELEM从矩阵中得到一个元素cvAbs Cvinvoke.cvAbs计算数组中所有元素的绝对值cvAbsDiff Cvinvoke.cvAbsDiff计算两个数组差值的绝对值cvAbsDiffS Cvinvoke.cvAbsDiffS计算数组和标量差值的绝对值cvAdd Cvinvoke.cvAdd两个数组的元素级的加运算cvAddS Cvinvoke.cvAddS一个数组和一个标量的元素级的相加运算cvAddWeighted Cvinvoke.cvAddWeighted两个数组的元素级的加权相加运算(alpha运算) cvAvg Cvinvoke.cvAvg计算数组中所有元素的平均值cvAvgSdv Cvinvoke.cvAvgSdv计算数组中所有元素的绝对值和标准差cvCalcCovarMatrix Cvinvoke.cvCalcCovarMatrix计算一组n维空间向量的协方差cvCmp Cvinvoke.cvCmp对两个数组中的所有元素运用设置的比较操作cvCmpS Cvinvoke.cvCmpS对数组和标量运用设置的比较操作cvConvertScale Cvinvoke.cvConvertScale用可选的缩放值转换数组元素类型cvCopy Cvinvoke.cvCopy把数组中的值复制到另一个数组中cvCountNonZero Cvinvoke.cvCountNonZero计算数组中非0值的个数cvCrossProduct Cvinvoke.cvCrossProduct计算两个三维向量的向量积(叉积) cvCvtColor Cvinvoke.cvCvtColor将数组的通道从一个颜色空间转换另外一个颜色空间cvDet Cvinvoke.cvDet计算方阵的行列式cvDiv Cvinvoke.cvDiv用另外一个数组对一个数组进行元素级的除法运算cvDotProduct Cvinvoke.cvDotProduct计算两个向量的点积cvEigenVV Cvinvoke.cvEigenVV计算方阵的特征值和特征向量cvFlip Cvinvoke.cvFlip围绕选定轴翻转cvGEMM Cvinvoke.cvGEMM矩阵乘法cvGetCol Cvinvoke.cvGetCol从一个数组的列中复制元素cvGetCols Cvinvoke.cvGetCols从数据的相邻的多列中复制元素cvGetDiag Cvinvoke.cvGetDiag复制数组中对角线上的所有元素cvGetDims Cvinvoke.cvGetDims返回数组的维数cvGetDimSize Cvinvoke.cvGetDimSize返回一个数组的所有维的大小cvGetRow Cvinvoke.cvGetRow从一个数组的行中复制元素值cvGetRows Cvinvoke.cvGetRows从一个数组的多个相邻的行中复制元素值cvGetSize Cvinvoke.cvGetSize得到二维的数组的尺寸,以CvSize返回cvGetSubRect Cvinvoke.cvGetSubRect从一个数组的子区域复制元素值cvInRange Cvinvoke.cvInRange检查一个数组的元素是否在另外两个数组中的值的范围内cvInRangeS Cvinvoke.cvInRangeS检查一个数组的元素的值是否在另外两个标量的范围内cvInvert Cvinvoke.cvInvert求矩阵的逆cvMahalonobis Cvinvoke.cvMahalonobis计算两个向量间的马氏距离cvMax Cvinvoke.cvMax在两个数组中进行元素级的取最大值操作cvMaxS Cvinvoke.cvMaxS在一个数组和一个标量中进行元素级的取最大值操作cvMerge Cvinvoke.cvMerge把几个单通道图像合并为一个多通道图像cvMin Cvinvoke.cvMin在两个数组中进行元素级的取最小值操作cvMinS Cvinvoke.cvMinS在一个数组和一个标量中进行元素级的取最小值操作cvMinMaxLoc Cvinvoke.cvMinMaxLoc寻找数组中的最大最小值cvMul Cvinvoke.cvMul计算两个数组的元素级的乘积(点乘)cvNot Cvinvoke.cvNot按位对数组中的每一个元素求反cvNormalize Cvinvoke.cvNormalize将数组中元素进行归一化cvOr Cvinvoke.cvOr对两个数组进行按位或操作cvOrs Cvinvoke.cvOrs在数组与标量之间进行按位或操作cvReduce Cvinvoke.cvReduce通过给定的操作符将二维数组简为向量cvRepeat Cvinvoke.cvRepeat以平铺的方式进行数组复制cvSet Cvinvoke.cvSet用给定值初始化数组cvSetZero Cvinvoke.cvSetZero将数组中所有元素初始化为0 cvSetIdentity Cvinvoke.cvSetIdentity将数组中对角线上的元素设为1,其他置0 cvSolve Cvinvoke.cvSolve求出线性方程组的解cvSplit Cvinvoke.cvSplit将多通道数组分割成多个单通道数组cvSub Cvinvoke.cvSub两个数组元素级的相减cvSubS Cvinvoke.cvSubS元素级的从数组中减去标量cvSubRS Cvinvoke.cvSubRS元素级的从标量中减去数组cvSum Cvinvoke.cvSum对数组中的所有元素求和cvSVD Cvinvoke.cvSVD二维矩阵的奇异值分解cvSVBkSb Cvinvoke.cvSVBkSb奇异值回代计算cvTrace Cvinvoke.cvTrace计算矩阵迹cvTranspose Cvinvoke.cvTranspose矩阵的转置运算cvXor Cvinvoke.cvXor对两个数组进行按位异或操作cvXorS Cvinvoke.cvXorS在数组和标量之间进行按位异或操作cvZero Cvinvoke.cvZero将所有数组中的元素置为0cvConvertScaleAbs Cvinvoke.cvConvertScaleAbs计算可选的缩放值的绝对值之后再转换数组元素的类型cvNorm Cvinvoke.cvNorm计算数组的绝对范数,绝对差分范数或者相对差分范数cvAnd Cvinvoke.cvAnd对两个数组进行按位与操作cvAndS Cvinvoke.cvAndS在数组和标量之间进行按位与操作cvScale是cvConvertScale的一个宏,可以用来重新调整数组的内容,并且可以将参数从一种数cvT cvT是函数cvTranspose的缩写cvLine Cvinvoke.cvLine画直线cvRectangle Cvinvoke.cvRectangle画矩形cvCircle Cvinvoke.cvCircle画圆cvEllipse Cvinvoke.cvEllipse画椭圆cvEllipseBox Cvinvoke.cvEllipseBox使用外接矩形描述椭圆cvFillPolycvFillConvexPolycvPolyLine cvFillPolycvFillConvexPolycvPolyLine画多边形cvPutText Cvinvoke.Cvinvoke.cvPutText在图像上输出一些文本cvInitFont Cvinvoke.Cvinvoke.cvInitFont采用一组参数配置一些用于屏幕输出的基本个特定字体cvSave Cvinvoke.Cvinvoke.cvSave矩阵保存cvLoad Cvinvoke.Cvinvoke.cvLoad矩阵读取cvOpenFileStorage Cvinvoke.Cvinvoke.cvOpenFileStorage为读/写打开存储文件cvReleaseFileStorage Cvinvoke.Cvinvoke.cvReleaseFileStorage释放存储的数据cvStartWriteStruct Cvinvoke.Cvinvoke.cvStartWriteStruct开始写入新的数据结构cvEndWriteStruct Cvinvoke.cvEndWriteStruct结束写入数据结构cvWriteInt Cvinvoke.cvWriteInt写入整数型cvWriteReal Cvinvoke.cvWriteReal写入浮点型cvWriteString Cvinvoke.cvWriteString写入字符型cvWriteComment Cvinvoke.cvWriteComment写一个XML或YAML的注释字串cvWrite Cvinvoke.cvWrite写一个对象cvWriteRawData Cvinvoke.cvWriteRawData写入多个数值cvWriteFileNode Cvinvoke.cvWriteFileNode将文件节点写入另一个文件存储器cvGetRootFileNode Cvinvoke.cvGetRootFileNode获取存储器最顶层的节点cvGetFileNodeByName Cvinvoke.cvGetFileNodeByName在映图或存储器中找到相应节点cvGetHashedKey Cvinvoke.cvGetHashedKey为名称返回一个惟一的指针cvGetFileNode Cvinvoke.cvGetFileNode在映图或文件存储器中找到节点cvGetFileNodeName Cvinvoke.cvGetFileNodeName返回文件的节点名cvReadInt Cvinvoke.cvReadInt读取一个无名称的整数型cvReadIntByName Cvinvoke.cvReadIntByName读取一个有名称的整数型cvReadReal Cvinvoke.cvReadReal读取一个无名称的浮点型cvReadRealByName Cvinvoke.cvReadRealByName读取一个有名称的浮点型cvReadString Cvinvoke.cvReadString从文件节点中寻找字符串cvReadStringByName Cvinvoke.cvReadStringByName找到一个有名称的文件节点并返回它cvRead Cvinvoke.cvRead将对象解码并返回它的指针cvReadByName Cvinvoke.cvReadByName找到对象并解码cvReadRawData Cvinvoke.cvReadRawData读取多个数值cvStartReadRawData Cvinvoke.cvStartReadRawData初始化文件节点序列的读取cvReadRawDataSlice Cvinvoke.cvReadRawDataSlice读取文件节点的内容cvGetModuleInfo Cvinvoke.cvGetModuleInfo检查IPP库是否已经正常安装并且检验运行是否正常cvResizeWindow Cvinvoke.cvResizeWindow用来调整窗口的大小cvSaveImage Cvinvoke.cvSaveImage保存图像cvMoveWindow Cvinvoke.cvMoveWindow将窗口移动到其左上角为x,y的位置cvDestroyAllWindow Cvinvoke.cvDestroyAllWindow用来关闭所有窗口并释放窗口相关的内存空间cvGetTrackbarPos Cvinvoke.cvGetTrackbarPos读取滑动条的值cvSetTrackbarPos Cvinvoke.cvSetTrackbarPos设置滑动条的值cvGrabFrame Cvinvoke.cvGrabFrame用于快速将视频帧读入内存cvRetrieveFrame Cvinvoke.cvRetrieveFrame对读入帧做所有必须的处理cvConvertImage Cvinvoke.cvConvertImage用于在常用的不同图像格式之间转换cvErode Cvinvoke.cvErode形态腐蚀cvDilate Cvinvoke.cvDilate形态学膨胀cvMorphologyEx Cvinvoke.cvMorphologyEx更通用的形态学函数cvFloodFill Cvinvoke.cvFloodFill漫水填充算法,用来进一步控制哪些区域将被填充颜色cvResize Cvinvoke.cvResize放大或缩小图像cvPyrUp Cvinvoke.cvPyrUp图像金字塔,将现有的图像在每个维度上都放大两倍cvPyrSegmentation Cvinvoke.cvPyrSegmentation利用金字塔实现图像分割cvThreshold Cvinvoke.cvThreshold图像阈值化cvAcc Cvinvoke.cvAcc可以将8位整数类型图像累加为浮点图像cvAdaptiveThreshold Cvinvoke.cvAdaptiveThreshold图像自适应阈值cvFilter2D Cvinvoke.cvFilter2D图像卷积cvCopyMakeBorder Cvinvoke.cvCopyMakeBorder将特定的图像轻微变大,然后以各种方式自动填充图像边界cvSobel Cvinvoke.cvSobel图像边缘检测,Sobel算子cvLaplace Cvinvoke.cvLaplace拉普拉斯变换图像边缘检测cvHoughLines2Cvinvoke.cvHoughLines2霍夫直线变换cvHoughCircles Cvinvoke.cvHoughCircles霍夫圆变换cvRemap Cvinvoke.cvRemap图像重映射,校正标定图像,图像插值cvWarpAffine Cvinvoke.cvWarpAffine稠密仿射变换cvGetQuadrangleSubPix Cvinvoke.cvGetQuadrangleSubPix仿射变换cvGetAffineTransform Cvinvoke.cvGetAffineTransform仿射映射矩阵的计算cvCloneImage Cvinvoke.cvCloneImage将整个IplImage结构复制到新的IplImage中cv2DRotationMatrix Cvinvoke.cv2DRotationMatrix仿射映射矩阵的计算cvTransform Cvinvoke.cvTransform稀疏仿射变换cvWarpPerspective Cvinvoke.cvWarpPerspective密集透视变换(单应性) cvGetPerspectiveTransform Cvinvoke.cvGetPerspectiveTransform计算透视映射矩阵cvPerspectiveTransform Cvinvoke.cvPerspectiveTransform稀疏透视变换cvCartToPolar Cvinvoke.cvCartToPolar将数值从笛卡尔空间到极坐标(极性空间)进行映射cvPolarToCart Cvinvoke.cvPolarToCart将数值从极性空间到笛卡尔空间进行映射cvLogPolar Cvinvoke.cvLogPolar对数极坐标变换cvDFT Cvinvoke.cvDFT离散傅里叶变换cvMulSpectrums Cvinvoke.cvMulSpectrums频谱乘法cvDCT Cvinvoke.cvDCT离散余弦变换cvIntegral Cvinvoke.cvIntegral计算积分图像cvDistTransform Cvinvoke.cvDistTransform图像的距离变换cvEqualizeHist Cvinvoke.cvEqualizeHist直方图均衡化cvCreateHist Cvinvoke.cvCreateHist创建一新直方图cvMakeHistHeaderForArray Cvinvoke.cvMakeHistHeaderForArray根据已给出的数据创建直方图cvNormalizeHist Cvinvoke.cvNormalizeHist归一化直方图cvThreshHist Cvinvoke.cvThreshHist直方图阈值函数cvCalcHist Cvinvoke.cvCalcHist从图像中自动计算直方图cvCompareHist Cvinvoke.cvCompareHist用于对比两个直方图的相似度cvCalcEMD2Cvinvoke.cvCalcEMD2陆地移动距离(EMD)算法cvCalcBackProject Cvinvoke.cvCalcBackProject反向投影cvCalcBackProjectPatch Cvinvoke.cvCalcBackProjectPatch图块的方向投影cvMatchTemplate Cvinvoke.cvMatchTemplate模板匹配cvCreateMemStorage Cvinvoke.cvCreateMemStorage用于创建一个内存存储器cvCreateSeq Cvinvoke.cvCreateSeq创建序列cvSeqInvert Cvinvoke.cvSeqInvert将序列进行逆序操作cvCvtSeqToArray Cvinvoke.cvCvtSeqToArray复制序列的全部或部分到一个连续内存数组中cvFindContours Cvinvoke.cvFindContours从二值图像中寻找轮廓cvDrawContours Cvinvoke.cvDrawContours绘制轮廓cvApproxPoly Cvinvoke.cvApproxPoly使用多边形逼近一个轮廓cvContourPerimeter Cvinvoke.cvContourPerimeter轮廓长度cvContoursMoments Cvinvoke.cvContoursMoments计算轮廓矩cvMoments Cvinvoke.cvMoments计算Hu不变矩cvMatchShapes Cvinvoke.cvMatchShapes使用矩进行匹配cvInitLineIterator Cvinvoke.cvInitLineIterator对任意直线上的像素进行采样cvSampleLine Cvinvoke.cvSampleLine对直线采样cvAbsDiff Cvinvoke.cvAbsDiff帧差cvWatershed Cvinvoke.cvWatershed分水岭算法cvInpaint Cvinvoke.cvInpaint修补图像cvGoodFeaturesToTrack Cvinvoke.cvGoodFeaturesToTrack寻找角点cvFindCornerSubPix Cvinvoke.cvFindCornerSubPix用于发现亚像素精度的角点位置cvCalcOpticalFlowLK Cvinvoke.cvCalcOpticalFlowLK实现非金字塔的Lucas-Kanade稠密光流算法cvMeanShift Cvinvoke.cvMeanShift mean-shift跟踪算法cvCamShift Cvinvoke.cvCamShift camshift跟踪算法cvCreateKalman Cvinvoke.cvCreateKalman创建Kalman滤波器cvCreateConDensation Cvinvoke.cvCreateConDensation创建condensation滤波器cvConvertPointsHomogenious Cvinvoke.cvConvertPointsHomogenious对齐次坐标进行转换cvFindChessboardCorners Cvinvoke.cvFindChessboardCorners定位棋盘角点cvFindHomography Cvinvoke.cvFindHomography计算单应性矩阵cvRodrigues2Cvinvoke.cvRodrigues2罗德里格斯变换cvFitLine Cvinvoke.cvFitLine直线拟合算法cvCalcCovarMatrix:Cvinvoke.cvCalcCovarMatrix:计算协方差矩阵cvInvert Cvinvoke.cvInvert计算协方差矩阵的逆矩阵cvMahalanobis Cvinvoke.cvMahalanobis计算Mahalanobis距离cvKMeans2Cvinvoke.cvKMeans2K均值cvCloneMat Cvinvoke.cvCloneMat根据一个已有的矩阵创建一个新矩阵cvPreCornerDetect Cvinvoke.cvPreCornerDetect计算用于角点检测的特征图cvGetImage Cvinvoke.cvGetImage CvMat图像数据格式转换成IplImage图像数据格式cvMatMul Cvinvoke.cvMatMul两矩阵相乘。
emgucv例子

emgucv例子
Emgu CV(也称为Emgu Computer Vision)是一个基于OpenCV
库的跨平台计算机视觉库,它提供了用于图像处理、对象检测、人
脸识别、视频分析等功能的丰富工具和类库。
下面我将从多个角度
来介绍Emgu CV的例子。
首先,Emgu CV提供了丰富的图像处理功能,包括图像滤波、
边缘检测、图像变换等。
例如,你可以使用Emgu CV来实现图像的
模糊处理、边缘检测以及图像的缩放和旋转等操作。
这些功能可以
帮助你处理图像数据,提取特征并进行后续的分析和识别。
其次,Emgu CV还支持对象检测和识别。
你可以利用Emgu CV
提供的算法和工具来实现目标检测、物体跟踪以及形状识别等功能。
例如,你可以使用Emgu CV来开发一个人脸识别系统,检测视频中
的人脸并进行识别和跟踪。
此外,Emgu CV还提供了丰富的视频处理功能。
你可以利用Emgu CV来实现视频的读取、处理和分析,包括视频流的捕获、帧
处理、运动检测等。
这些功能可以帮助你开发视频监控系统、视频
分析系统以及视频内容识别等应用。
总之,Emgu CV提供了丰富的计算机视觉功能和工具,可以帮助开发者快速实现图像处理、对象检测、人脸识别、视频分析等功能。
通过使用Emgu CV,开发者可以更加高效地开发和部署计算机视觉应用,实现图像和视频数据的分析和识别。
希望这些例子可以帮助你更好地了解Emgu CV的功能和应用。
emgu分水岭算法计数

emgu分水岭算法计数摘要:一、分水岭算法简介1.分水岭算法的概念2.分水岭算法的应用场景二、emgu分水岭算法实现1.emgu库简介2.emgu分水岭算法原理3.emgu分水岭算法步骤三、emgu分水岭算法计数1.计数原理2.计数方法3.计数结果分析四、案例演示1.图像处理实例2.结果分析正文:【一、分水岭算法简介】分水岭算法(Watershed algorithm)是一种图像处理领域中的边缘检测和分割技术。
它的基本思想是寻找图像中像素之间的极值点,将这些极值点作为分水岭,将图像划分为不同的区域。
这种算法具有较好的适应性和稳定性,可以有效处理复杂场景下的图像分割问题。
【二、emgu分水岭算法实现】emgu(Emgu CV)是一个基于OpenCV的.NET库,提供了丰富的图像处理功能。
emgu分水岭算法实现了分水岭原理,并对算法进行了优化。
以下是emgu分水岭算法的基本步骤:1.对输入图像进行预处理,如滤波、去噪等。
2.计算图像的梯度幅值和方向。
3.寻找梯度幅值的最大值点和最小值点。
4.将最大值点和最小值点连接成边缘。
5.对边缘进行填充,得到分割后的图像。
【三、emgu分水岭算法计数】emgu分水岭算法计数是对分割后的图像中边缘像素进行统计的过程。
计数原理是根据边缘像素的颜色、纹理等特征,将其分为不同的类别。
以下是一种简单的计数方法:1.预处理:对分割后的图像进行去噪、平滑等操作,以消除边缘附近的噪声。
2.特征提取:从处理后的图像中提取边缘像素的特征,如颜色、纹理等。
3.分类:根据特征将边缘像素分为不同的类别。
可以使用机器学习方法(如SVM、神经网络等)进行分类。
4.计数:统计各个类别边缘像素的数量,得到最终的结果。
【四、案例演示】以下是一个使用emgu分水岭算法进行图像处理的实例:1.输入图像:一幅包含建筑物、道路、树木等元素的复杂场景图像。
2.使用emgu分水岭算法进行分割。
3.观察分割结果:可以发现,建筑物、道路和树木等元素得到了较好的分割。
EmguCV常用函数总结

EmguCV常⽤函数总结1 Emgucv常⽤函数总结:2读取图⽚3 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor);4//根据路径创建指定的灰度图⽚5 Mat scr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.Grayscale);6获取灰度//图像类型转换, bgr 转成 gray 类型。
MAT Bw = New MAT7 CvInvoke.CvtColor(SCr, bw, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);8//相当于⼆值化图 --⿊⽩根据⼤⼩10判断为0还是2559 CvInvoke.Threshold(bw,bw,10,255,Emgu.CV.CvEnum.ThresholdType.BinaryInv);10//获取指定区域图⽚ SCr为mat类型11 Rectangle rectangle = new Rectangle(10,10,10,10);12 SCr = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle).Mat;13//将Mat类型转换为Image类型14 Image<Bgr, byte> Su = SCr.ToImage<Bgr, byte>();15 Image<Bgr, byte> Img = new Image<Bgr, byte>(new Bitmap(""));//路径声明16 Image<Bgr, byte> Sub = SCr.ToImage<Bgr, byte>().GetSubRect(rectangle);//指定范围17//指定参数获得结构元素18 Mat Struct_element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(3, 3), new Point(-1, -1));19//膨胀20 CvInvoke.Dilate(bw, bw, Struct_element, new Point(1,1),3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));21//腐蚀当Struct_element模型创建不合理或者膨胀腐蚀次数较⼤时可能图像会发⽣偏移22 CvInvoke.Erode(bw, bw, Struct_element, new Point(-1, -1), 3,Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 0, 0));23//轮廓提取24 VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();25//筛选后26 CvInvoke.FindContours(bw, contours, null, Emgu.CV.CvEnum.RetrType.List, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);27int ksize = contours.Size;//获取连通区域的个数。
EmguCV入门指南-中文翻译版 (1)

CvPoint2D32f
System.Drawing.Size
CvSize
System.Drawing.Recta ngle
CvRect
枚举常量映射 Emgu.CV.CvEnum
函数映射 – EMGU.CV.CVINVOKE ..................................................................................................... 2 结构映射 EMGU.CV.STRUCTURE.MXXX.............................................................................................2 枚举常量映射 EMGU.CV.CVENUM ................................................................................................. 2
MATRICES 如何使用........................................................................................................................6 深度作为泛型参数 .................................................................................................................. 6 矩阵深度 .................................................................................................................................. 6 XML 序列化 ..............................................................................................................................7
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Add
数组相加
AddWeighted
数组权重相加
Add
数组相加
AddWeighted
数组权重相加
BitwiseAnd
计算两个数组的每元素的逐位逻辑连接:dst(I)= src1(I)&src2(I)if mask(I)!= 0。所有数组必须具有相同的类型(除了掩膜)和大小
dst(I)=src1(I) & src2(I)
Norm(IInputArray, NormType, IInputArray)
返回计算的范数。多通道阵列被视为单通道,即所有通道的结果相加。
Norm(IInputArray, IInputOutputArray, NormType, IInputArray)
返回计算的范数。多通道阵列被视为单通道,即所有通道的结果相加。
用于标定立体相机
StereoRectif平面处于相同的平面。
StereoRectifyUncalibrated
在不知道摄像头的固有参数和它们在空间的相对位置计算校正变换
方法
CalibrateCamera(IInputArray, IInputArray, Size, IInputOutputArray, IInputOutputArray, IOutputArray, IOutputArray, CalibType, MCvTermCriteria)
SolvePnPRansac
利用Ransac方法利用点对求解相机姿态
StereoRectify
计算每个摄像机的旋转矩阵(虚拟地)使两个摄像机图像平面处于相同的平面。
Undistort
转换图像以补偿径向和切向透镜失真
UndistortPoints
与cvInitUndistortRectifyMap相似但也不同,相似的内容是他们都可用于校正镜头失真和透视变换。不同的是函数cvInitUndistortRectifyMap实际上执行的是反向转换以初始化地图,而这个函数执行的是正向变换。
AbsDiff
计算两数组差值的绝对值
AccumulateSquare
对输入数据或其选中的ROI求和并平方(Adds the input src or its selected region, raised to power 2, to the accumulator sqsum)
AccumulateWeighted
Randu(IInputOutputArray, IInputArray, IInputArray)
返回均匀分布的随机数,填入数组或矩阵
Randu(IInputOutputArray, MCvScalar, MCvScalar)
返回均匀分布的随机数,填入数组或矩阵
SetIdentity
初始化标度单位矩阵
方法
CalibrationMatrixValues
使用计算的相机校准矩阵,像素中的图像帧分辨率和物理孔径大小来计算各种有用的相机(传感器/透镜)特性
DrawChessboardCorners
棋盘格角点的绘制(摄像机标定)
Find4QuadCornerSubpix
找到棋盘角的亚像素精度的准确位置
FindChessboardCorners
cvInitImageHeader
初始化图像的头文件结构,指针指向由用户指定,并返回指针。(Initializes the image header structure, pointer to which is passed by the user, and returns the pointer.)
返回图像的头文件信息,输入数据类型可以是(matrix - CvMat*, or image - IplImage*)
cvGetMat
返回输入矩阵的头文件信息,输入矩阵可以是matrix - CvMat, image - IplImage或multi-dimensional dense array - CvMatND*
用于标定立体相机(Estimates transformation between the 2 cameras making a stereo pair. If we have a stereo camera, where the relative position and orientatation of the 2 cameras is fixed, and if we computed poses of an object relative to the fist camera and to the second camera, (R1, T1) and (R2, T2), respectively (that can be done with cvFindExtrinsicCameraParams2), obviously, those poses will relate to each other, i.e. given (R1, T1) it should be possible to compute (R2, T2) - we only need to know the position and orientation of the 2nd camera relative to the 1st camera. That's what the described function does. It computes (R, T) such that: R2=R*R1, T2=R*T1 + T)
计算源数据的加权平均和,使得acc变为帧序列的运行平均值(Calculates weighted sum of input src and the accumulator acc so that acc becomes a running average of frame sequence: acc(x,y)=(1-alpha) * acc(x,y) + alpha * image(x,y) if mask(x,y)!=0 where alpha regulates update speed (how fastaccumulator forgets about previous frames).
cvGetRawData
以低级别信息填充输出变量。
cvGetRow
返回头文件信息,对应于输入数组的指定行。
cvGetRows
返回头文件信息,对应输入数组的指定行跨度。
cvGetSubRect
返回头文件,对应于输入数组的指定矩形。换句话说,它允许用户将输入阵列的一部分视为独立阵列。通过还可提取ROI的子阵列。
找到圆圈网格中心
GetDefaultNewCameraMatrix
返回默认的新相机矩阵
GetOptimalNewCameraMatrix
基于自由缩放参数返回新的相机矩阵
StereoCalibrate(IInputArray, IInputArray, IInputArray, IInputOutputArray, IInputOutputArray, IInputOutputArray, IInputOutputArray, Size, IOutputArray, IOutputArray, IOutputArray, IOutputArray, CalibType, MCvTermCriteria)
估计每个视图的照相机固有参数和外部参数
CalibrateCamera(MCvPoint3D32f[][],PointF[][], Size, IInputOutputArray, IInputOutputArray, CalibType, MCvTermCriteria,Mat[],Mat[])
估计每个视图的照相机固有参数和外部参数
尝试确定输入图像是否是棋盘图案的视图,并定位标定板内角点
FindCirclesGrid(Image<Gray, Byte>, Size, CalibCgType, Feature2D)
找到圆圈网格中心
FindCirclesGrid(IInputArray, Size, IOutputArray, CalibCgType, Feature2D)
BitwiseOr
计算两个数组的每元素逐位分离(Calculates per-element bit-wise disjunction of two arrays)
dst(I)=src1(I)|src2(I)
CalcCovarMatrix
计算一组向量的协方差矩阵
cvClearND
清除(设置为零)密集数组的特定元素或删除稀疏数组的元素。如果买没有元素,该函数不运行
StereoCalibrate(MCvPoint3D32f[][],PointF[][],PointF[][], IInputOutputArray, IInputOutputArray, IInputOutputArray, IInputOutputArray, Size, IOutputArray, IOutputArray, IOutputArray, IOutputArray, CalibType, MCvTermCriteria)
Swap(Mat, Mat)
交换两个矩阵
Swap(UMat, UMat)
交换两个矩阵
Trace
返回矩阵对角线元素之和
Transform
对src数组的每个元素进行矩阵变换,并将结果存储到dst中。源数组和目标数据应该有相同的深度、尺寸或ROI的尺寸。transmat和shiftvec应该是浮点型矩阵
Transpose
Gemm
执行广义矩阵乘法
dst = alpha*op(src1)*op(src2) + beta*op(src3), where op(X) is X or XT