OpenCV主要函数介绍

合集下载

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所有函数汇总

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将图像进行透视变换。

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()函数返回两个值,⼀个是轮廓本⾝,还有⼀个是每条轮廓对应的属性。

opencv学习(7)图像的各种滤波函数的介绍

opencv学习(7)图像的各种滤波函数的介绍

opencv学习(7)图像的各种滤波函数的介绍在计算机视觉和图像处理中,滤波是一种有效的方法,用于改善图像的质量、去除噪声、边缘检测,以及其他一些应用。

1. 均值滤波 (cv2.blur)均值滤波是一种简单的滤波方法,通过在像素周围取平均值来平滑图像。

它对于去除噪声和平滑图像非常有效,但会导致图像细节的丢失。

2. 高斯滤波 (cv2.GaussianBlur)高斯滤波是一种重要的滤波方法,它使用高斯函数作为权重来对像素周围的值进行加权平均。

相比于均值滤波,高斯滤波能够更好地平滑图像同时保留更多的细节。

3. 中值滤波 (cv2.medianBlur)中值滤波是一种非线性滤波方法,它将每个像素周围的值排序,并用其中值替代原始像素的值。

中值滤波对于去除椒盐噪声非常有效,并能保持图像的边缘信息。

然而,它可能无法有效处理高斯噪声。

4. 双边滤波 (cv2.bilateralFilter)双边滤波是一种保边平滑的滤波方法,它考虑了像素之间的空间关系和像素值之间的相似性。

双边滤波能够有效平滑图像的同时保留边缘信息,因此在图像降噪和保边去模糊等任务中广泛应用。

5. 均值漂移滤波 (cv2.pyrMeanShiftFiltering)均值漂移滤波是一种通过迭代的方式调整像素的颜色来实现平滑的滤波方法。

它基于像素的直方图,将像素移动到颜色分布最密集的位置。

均值漂移滤波对于图像分割、图像压缩和颜色量化等应用非常有效。

除了上述常见的滤波函数,opencv还提供了一些其他滤波方法,如形态学滤波、自适应滤波等,可以根据具体的需求选择合适的方法。

尽管滤波可以用于去除噪声或平滑图像,但滤波也可能会导致图像的细节丢失或模糊。

因此,在选择滤波方法时,需要权衡去除噪声和保留细节之间的平衡。

总结起来,图像滤波在计算机视觉和图像处理中起着重要作用。

opencv提供了多种滤波函数,可以根据具体需求选择合适的方法。

通过选择适当的滤波方法,可以去除噪声、平滑图像,并保留图像的边缘和细节信息。

OPENCV库函数使用说明

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的videocapture函数

opencv的videocapture函数

文章标题:深度剖析opencv的videocapture函数一、什么是opencv的videocapture函数?在计算机视觉和图像处理领域,OpenCV 是一个开源的计算机视觉库,它提供许多用于处理图像和视频的函数和工具。

其中,videocapture 函数是OpenCV 中用来捕获视频的一个非常重要的函数。

通过该函数,我们可以从摄像头、文件或者网络摄像头中获取视频流,进行各种处理和分析。

二、videocapture函数的基本使用方法1. 创建videocapture对象:我们需要创建一个 videocapture 对象,该对象用于表示视频捕获设备。

我们可以直接指定摄像头的编号,或者指定视频文件的路径。

2. 读取视频帧:我们可以通过 videocapture 对象的 read() 函数来读取视频的帧。

通过循环不断读取帧,我们就可以对视频进行处理和分析。

3. 处理视频帧:一旦获取了视频帧,我们可以对其进行各种处理,比如图像增强、目标检测、运动跟踪等等。

4. 释放资源:在使用完 videocapture 对象后,需要及时释放资源,以避免资源泄漏。

三、videocapture函数的深度剖析在使用 videocapture 函数的过程中,我们需要注意一些细节和问题。

不同操作系统下对摄像头编号的规定可能不一样;不同视频编解码格式的支持情况;视频帧的数据类型和格式等等。

对于这些问题,我们需要逐一进行深入的了解和探讨,以便在实际应用中能够更加灵活和高效地使用 videocapture 函数。

四、个人观点和理解对于 videocapture 函数,我个人认为它是 OpenCV 中一个非常有用且强大的函数,通过该函数可以轻松地实现视频捕获和处理。

在实际项目中,我曾经使用 videocapture 函数对摄像头捕获的视频进行目标检测和追踪,取得了非常不错的效果。

我深信掌握 videocapture 函数的深度和广度用法,将有助于提升我在计算机视觉领域的技能和应用能力。

opencv 画点函数

opencv 画点函数

opencv 画点函数1. 介绍OpenCV是一个流行的计算机视觉库,提供了各种图像处理和计算机视觉算法。

其中,画点函数是OpenCV的基本绘图函数之一。

它可以在图像上绘制一个或多个点,用于标记关键点、特征点或目标点。

这些点可以用不同的颜色和大小进行绘制,以增强可视化效果。

本文将深入探讨OpenCV中的画点函数,详细介绍其用法、参数和示例。

通过学习这些内容,读者将能够充分理解该函数的功能,并在自己的项目中灵活应用。

2. 画点函数的基本用法画点函数在OpenCV中的函数名为cv::circle()。

它的基本用法如下:void cv::circle(InputOutputArray img, // 输入输出图像Point center, // 点的坐标int radius, // 点的半径const Scalar& color, // 点的颜色,可以是单个颜色或BGR颜色向量int thickness = 1, // 线的粗细,负数表示填充圆int lineType = LINE_8, // 线的类型,默认为8连通int shift = 0 // 坐标点的小数位数,默认为0);在上述代码中,各参数的含义如下:•img:需要绘制点的图像。

•center:点的中心坐标,可以使用cv::Point类表示,例如cv::Point(x, y)。

•radius:点的半径,单位为像素。

•color:点的颜色,可以是单个颜色值,例如cv::Scalar(0, 0, 255)表示红色,也可以是BGR颜色向量,例如cv::Scalar(255, 0, 0)表示蓝色。

•thickness:点的线条粗细,负数表示填充整个圆。

•lineType:线的类型,可以是8连通或4连通,默认为8连通。

•shift:坐标点的小数位数,默认为0。

3. 画点函数的参数详解3.1 输入输出图像img参数表示需要绘制点的图像,可以是单通道或多通道图像。

cv2库函数介绍

cv2库函数介绍

cv2库函数介绍【原创实用版】目录1.cv2 库简介2.cv2 库中的主要函数a.图像读取和显示b.图像转换c.图像滤波d.图像特征检测e.轮廓提取和分析f.物体识别和跟踪正文【cv2 库简介】cv2(OpenCV)是一个开源的计算机视觉和机器学习库,它包含了许多图像处理和计算机视觉方面的功能。

cv2 库主要用 C++编写,但也提供了 Python 接口,使得 Python 开发者可以方便地使用这个库。

在 cv2 库中,有许多实用的函数,可以帮助我们实现各种图像处理和计算机视觉任务。

【cv2 库中的主要函数】1.图像读取和显示在 cv2 库中,我们可以使用`cv2.imread()`函数来读取图像,这个函数可以读取多种格式的图像文件,例如:`.jpg`、`.png`、`.bmp`等。

读取图像后,我们可以使用`cv2.imshow()`函数将其显示在窗口中。

示例代码:```pythonimport cv2# 读取图像image = cv2.imread("example.jpg")# 显示图像cv2.imshow("Example Image", image)cv2.waitKey(0)cv2.destroyAllWindows()```2.图像转换cv2 库提供了许多图像转换函数,例如:`cv2.cvtColor()`用于转换图像颜色空间,`cv2.resize()`用于调整图像大小,`cv2.flip()`用于翻转图像等。

示例代码:```pythonimport cv2# 读取图像image = cv2.imread("example.jpg")# 转换为灰度图像gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 显示图像cv2.imshow("Gray Image", gray_image)cv2.waitKey(0)cv2.destroyAllWindows()```3.图像滤波cv2 库提供了许多图像滤波函数,例如:`cv2.blur()`用于模糊图像,`cv2.GaussianBlur()`用于使用高斯核对图像进行卷积,`cv2.edgeDetection()`用于检测图像边缘等。

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

4.1 OpenCV主要函数介绍1) cvLoadImage 从文件中读取图像IplImage*cvLoadImage(const char* filename,int flags=CV_LOAD_IMAGE_COLOR );函数cvLoadImage从指定文件读入图像,返回读入图像的指针。

其中filename是要被读入的文件的文件名;flags指定读入图像的颜色和深度。

2)cvSaveImage 保存图像到文件int cvSaveImage( const char* filename, const CvArr* image );函数cvSaveImage保存图像到指定文件。

其中filename保存文件名。

image 要保存的图像。

图像格式的的选择依赖于filename的扩展名,只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。

3)cvQueryFrame从摄像头或者文件中抓取并返回一帧IplImage* cvQueryFrame( CvCapture* capture );函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。

这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。

返回的图像不可以被用户释放或者修改。

其中capture视频获取结构。

4)cvCaptureFromCAM 初始化摄像头CvCapture* cvCaptureFromCAM( int index );函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。

其中index要使用的摄像头索引。

如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。

5)cvHaarDetectObjects 用来检测图像中的人脸区域CV API(CvSeq*) cvHaarDetectObjects( const CvArr* image,CvHaarClassifierCascade* cascade,CvMemStorage* storage,double scale_factor CV_DEFAULT(1.1),int min_neighbors CV_DEFAULT(3),int flags CV_DEFAULT(0),CvSize min_size CV_DEFAULT(cvSize(0,0)),CvSize max_size CV_DEFAULT(cvSize(0,0)));用于快速检测人脸区域,便于提取得到人脸数据。

其中image 为被检图像,cascade为 haar分类器级联的内部标识形式,storage 为用来存储检测到的一序列候选目标矩形框的内存区域,scale_factor 在前后两次相继的扫描中,搜索窗口的比例系数,例如1.1指将搜索窗口依次扩大10%,min_neighbors 为构成检测目标的相邻矩形的最小个数(缺省-1),flags 为操作方式,min_size 为检测窗口的最小尺寸。

缺省的情况下被设为分类器训练时采用的样本尺寸(人脸检测中缺省大小是~20×20)。

6)cvRectangle 绘制矩形CV API(void) cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2,CvScalar color, int thickness CV_DEFAULT(1),int line_type CV_DEFAULT(8),int shift CV_DEFAULT(0));绘制出检测到人脸区域并显示,便于使用者观看是否检测出人脸,。

其中img 为图像,pt1 -- 矩形的一个顶点,pt2 -- 矩形对角线上的另一个顶点,color -- 线条颜色 (RGB) 或亮度(灰度图像)(grayscale image),thickness -- 组成矩形的线条的粗细程度,取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形,line_type -- 线条的类型。

见cvLine的描述,shift -- 坐标点的小数点位数。

7)cvResize 重置图像大小CV API(void) cvResize( const CvArr* src, CvArr* dst,int interpolation CV_DEFAULT( CV_INTER_LINEAR )); 重置图像大小,使图像归一到同样大小。

interpolation 插值方式:选择用线性插值(CV_INTER_LINEAR)和区域插值(CV_INTER_AREA)。

8)cvOpenFileStorage 打开存在或创建新的文件CV API(CvFileStorage*) cvOpenFileStorage( const char* filename,CvMemStorage* memstorage,int flags,const char* encoding CV_DEFAULT(NULL) );把训练数据保存至xml文件,通过此函数打开文件便于进行读写。

flag有10种,这里用到其中读和写二种:CV_STORAGE_READ (打开文件读数据)和CV_STORAGE_WRITE(打开文件写数据)。

文件打开后有写操作和读操作函数:cvWrite();cvWriteInt();cvReadByName();cvReadIntByName()。

9)cvCalcEigenObjects 计算引入矩阵的e i g e n v e c t o r(特征向量)、e i g e n v a l u e(特征根)、i m a g e a v e r a g e(影像平均值)。

CV API(void) cvCalcEigenObjects( int nObjects, void* input, void*output,int ioFlags, int ioBufSize, void* userData,CvTermCriteria* calcLimit, IplImage* avg,float* eigVals );OpenCV 已经实现PCA关键算法之一,计算出传入图像阵列的特征值、特征向量和平均值。

其中nObjects为样本个数,input 为输入的影响矩阵,output 为特征矩阵,calcLimit为回调结束条件,avg 为平均值,eigVals 特征根。

10)cvEigenDecomposite 透过e i g e n v e c t o r和原始影像集来解析每张图片降维后对应的系数c o e f f i c i e n t s。

CV API(void) cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput,int ioFlags, void* userData, IplImage* avg,float* coeffs );OpenCV 已经实现PCA关键算法之一,对输入图像投影到子空间,计算投影各维度系数,以此表示图像。

其中obj为输入目标图像,nEigObjs为选取的特征维数,eigInput为向量组成的变换矩阵,数据结构属于IplImage队列,或者根据ioFlag参数值变化的回调函数,avg为平均值,coeffs 为输入图像对应的投影。

11)cvConvertScale 使用线性变换转换数组,得到可以保存显示的图像CV API(void) cvConvertScale( const CvArr* src,CvArr* dst,double scale CV_DEFAULT(1),double shift CV_DEFAULT(0) );OpenCV要保存显示图像,图像数据必须是uchar格式,因此对于非uchar 数据需要转换。

其中src 为输入数组,dst 为输出数组,scale 为比例因子,shift 为该加数被加到输入数组元素按比例缩放后得到的元素上,采用公式dst(I)=src(I)*scale + (shift,shift,...) 进行转换。

4.2 关键功能部分函数设计实现4.2.1摄像头操作:要实现系统功能,首要先从摄像头中读取数据,为此,需要保证摄像头开启,为保证获取画面统一便于管理,通过cvSetCaptureProperty()函数设置摄像头分辨率为常用值(320*240),读取摄像头数据,返回 IplImage图像数据,该部分需要实现的是打开摄像头、设置摄像头分辨率属性、读取摄像头图像,还有使用完后释放摄像头资源操作。

软件启动后若选择不从文件中读取信息,自动启动摄像头获取图片。

按“ESC”键退出系统时自动回收资源,关闭摄像头,释放摄像头资源。

4.1.2人脸检测功能:要实现人脸识别,首要先检测出人脸。

实现该功能,接收摄像头中获取的图像数据,进行灰度化等操作,利用Haar特征,使用强级联分类器,搜索检测人脸区域,提取出可能的最大脸,为防止误检,进一步在提取出的区域再次对人眼进行检测,过滤掉检测不到人眼的区域,从而有效地降低了人脸区域误检率,获取真正需要的人脸区域。

人脸区域获取后,进一步提取出人脸图像,为了训练需要,还须对提取的图像进行大小归一化,使得得到的图像大小统一,为了进一步提高后续识别效率,对图像进行直方图均衡化,最后得到所需图像用于训练和识别。

4.1.3图像特征训练提取:利用主成分分析法(PCA)算法对收集到的用户图像进行降维训练,提取人脸特征值。

主成分分析法实现主要分为几步完成: 1、去均值 2、计算协方差矩阵及其特征值和特征向量 3、计算协方差矩阵的特征值大于阈值的个数 4、降序排列特征值 5、去掉较小的特征值 6、去掉较大的特征值(可有可无) 7、合并选择的特征值 8、选择相应的特征值和特征向量 9、计算白化矩阵 10、提取主分量。

读取人脸训练集,利用PCA算法得到特征人脸和平均人脸,在此基础上把每张训练人脸投影到特征脸空间中得到投影数据作为每幅人脸的特征脸。

满足系统要求,可能需要能够识别多人身份,因此需要能够添加用户。

系统启动后,识别过程中,设置按下’n’键,进入添加用户模式,输入用户名开始自动采集用户脸部图像,开始训练提取特征数据。

4.1.4训练图像保存:PCA算法过程中会计算出人脸的平均脸信息,和特征脸信息,但得到的这些信息是无法直接显示到屏幕上的,想要看到这些图像,就需要把其加以转换,得到可以直接显示的格式。

在这一阶段,计算出其最大值和最小值,对于超出数值范围和非数值的值进行过滤修改,然后利用cvConvertScale函数将float类型的值转化为需要的uchar类型,然后调用cvshowImage进行保存。

相关文档
最新文档