几个重要的函数opencv

1、CvCapture结构体: CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型(如int,char等)只是存放的内容不一样,在OpenCv中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复。 如CvCapture* pCapture = NULL;

2、cvCreateFileCapture(const char* mov) cvCreateFileCapture()通过参数设置确定要读入的avi文件,返回一个指向CvCapture结构的指针。这个结构包括了所有关于要读入avi文件的信息,其中包含状态信息。调用这个函数之后,返回指针所指向的CvCapture结构呗初始化到对应的avi文件的开头。 如pCapture=cvCreateFileCapture("d:\\xx.avi");

3、IplImage* cvCreateImage(CvSize size,int depth,int channels); cvCreateImage:创建首地址并且分配存储空间:IplImage* cvCreateImage(CvSize size,int depth,int channels); //size:图像的宽、高;depth:图像元素的位深度,可以是一下其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位整型 IPL_DEPTH_16U - 无符号16位整型 IPL_DEPTH_16S - 有符号16位整型 IPL_DEPTH_32S - 有符号32位整型 IPL_DEPTH_32F - 单精度浮点数 IPL_DEPTH_64F - 双精度浮点数

4、cvSetTrackbarPos("进度条名称","窗口名称",pos): 这个函数要和另外两个函数配套使用,一个是回调函数,也就是响应鼠标的函数(即下面的CvTrackbarCallback on_change),这个是自定义的。第二个是创建函数cvCreateTrackbar(),这个函数的最后一个参数是前面回调函数,用来创建一个进度条。 关于cvSetTrackbarPos,他有3个参数cvSetTrackbarPos("进度条名称","窗口名称",pos)。第三个参数是当前进度条的位置,可以按照视频帧数的比例来设置当前进度值,也可以用循环pos++来设置。

5、cvQueryFrame(CvCapture* capture): 表示从摄像头或者文件中抓取并返回一帧。 IplImage* cvQueryFrame(CvCapture* capture);函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并且返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。 cvQueryFrame的参数是CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在cvCapture结构中分配好的内存,这样就没必要通过cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像对应的内存空间会被释放。

6、CvCaptureFromCAM(int index): 初始化从摄像头中获取视频:CvCapture* cvCaptureFromCAM(int index); index:要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那么使用参数-1便可以。 函数给从摄像头的视频流分配和初始化CvCapture结构。

7、cvCreateTrackbar(const char* trackbar_name,const char* window_name,int* value,int count,CvTrackbarCallback on_change); 该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。 定义: CV_EXTERN_C_FUNCPTR(void (*CvTrackbarCallback)(int pos)); int cvCreateTrackbar(const char* trackbar_name,const char* window_name,int* value,int count,CvTrackbarCallback on_change); 参数: trackbar_name:被创建的trackbar名字 window_name:窗口名字,这个窗口将为被创建trackbar的父对象 value:整数指针,它的值将反映滑块的位置,这个变量指定创建时的滑块位置。 count:滑块位置的最大值。最小值一直是0 on_change:每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int),如果没有回调函数,这个值可以设置为NULL。 函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。 被创建的trackbar默认显示在指定窗口的顶端,可以通过cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的位置。

8、double cvGetCaptureProperty(CvCapture* capture,int property_id); double cvGetCaptureProperty(CvCapture* capture,int property_id)获取视频文件的一些属性, //capture 视频获取结构;property_id 属性标识。 以下是OpenCV属性的一些宏定义: CV_CAP_PROP_POS_MSEC //影片目前位置,为毫秒数或者视频获取时间戳 CV_CAP_PROP_POS_FRAMES //将被下一步解压/获取的帧索引,以0为起点 CV_CAP_PROP_POS_AVI_RATIO //视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾) CV_CAP_PROP_FRAME_WIDTH //视频流中的帧宽度 CV_CAP_PROP_FRAME_HEIGHT //视频流中的帧高度 CV_CAP_PROP_FPS //帧率 CV_CAP_PROP_FOURCC //表示codec的四个字符 CV_CAP_PROP_FRAME_COUNT // 视频文件中帧的总数 CV_CAP_PROP_FORMAT CV_CAP_PROP_MODE CV_CAP_PROP_BRIGHTNESS CV_CAP_PROP_CONTRAST CV_CAP_PROP_SATURATION CV_CAP_PROP_HUE CV_CAP_PROP_GAIN CV_CAP_PROP_EXPOSURE CV_CAP_PROP_CONVERT_RGB CV_CAP_PROP_WHITE_BALANCE CV_CAP_PROP_RECTIFICATION 通过创建一个Capture对象的指针后,调用cvGetCaptureProperty即可获取上述任何相关属性;但是我们不能太依赖这个函数;比如我们想获取一段视频的帧数,我们就不能太依赖于CV_CAP_PROP_FRAME_COUNT这个属性;因为cvGetCaptureProperty对属性的访问,其实访问的是关联视频文件的文件头信息,并不是真正去访问了视频的图像数据,这就带来一个问题:我们在讲其他视频格式转换为AVI格式的时候,图像帧数并没改变,只是视频文件头改变了,这时直接通过get函数读取的信息就可能不准确;最好的办法是迭代从视频中取出一帧,检查是否有数据,来确定该视频文件的总共帧数~~~ 例如: 示例1: CvCapture* cap = cvCaptureFromFile(videoName);//获取视频 int numFrames = (int) cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_COUNT);//得到视频帧数, //得到的帧数是148帧 示例2:[较好的方法] IplImage* pImg = NULL; int count = 0; while((pImg = cvQueryFrame(cap))!=NULL){ count++; }//得到的帧数只有60帧

9、cvSetCaptureProperty int cvSetCaptureProperty(CvCapture* capture,int property_id,double value); 注意此方法定位并不准确 capture:视频获取结构 property_id:属性识别,可以是下面之一: CV_CAP_PROP_POS_MSEC //从文件开始的位置,单位为毫秒 CV_CAP_PROP_POS_FRAMES //单位为帧数的位置(只对视频文件有效) CV_CAP_PROP_POS_AVI_RATIO // 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾) CV_CAP_PROP_FRAME_WIDTH //视频流的帧宽度(只对摄像头有效) CV_CAP_PROP_FRAME_HEIGHT //视频流的帧高度(只对摄像头有效) CV_CAP_PROP_FPS //帧率(只对摄像头有效) CV_CAP_PROP_FOURCC //表示codec的四个字符(只对摄像头有效) value表示的是属性的值

10、cvSmooth 函数cvSmooth可以使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像。每一种方法都有自己的特点和局限。没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换和32位浮点数到32为浮点数的变换格式。简单模糊和高斯模糊支持1-或3-通道,8-比特和32-比特浮点图像。这两种方法可以(in-place)方式处理图像。中值和双向滤波工作于1-或3-通道,8-位图像,但是不能以in-place方式处理图像。 void cvSmooth(const CvArr* src,CvArr* dst,int smoothtype=CV_GAUSSIAN,int param1=3,int param2=0,double param3=0,double param4=0); //src:输入图像 //dst:输出图像 //smoothtype:平滑方法 平滑方法如下: CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。 CV_BLUR (simple blur) - 对每个象素param1×param2邻域 求和并做尺度变换 1/(param1.param2). CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 CV_MEDIAN (median blur) - 对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的). CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色sigma=param1,空间 sigma=param2. 平滑操作的第一个参数. param2: 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值 为零,则表示其被设定为param1。 param3: 对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作). 函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.

11、cvGetSize cvGetSize是Opencv提供的一种操作矩阵图像的函数 得到二维的数组的尺寸,以CvSize返回。 CvSize cvGetSize(const CvArr* arr); 它与cvGetDims()密切相关,cvGetDim()返回一个数组的大小。主要的不同是cvGetSize()是专为矩阵和图像设计的,这两种对象的维数总是2。其尺寸可以以CvSize结构的形式返回,例如当创建一个新的大小相同的矩阵或图像时,使用此函数就很方便。

12、cvSize cvSize是OpenCV的基本数据类型之一。表示矩阵框大小,以像素为精度。与CvPoint结构类似,但数据成员是integer类型的width和heigh 原型: typedef struct CvSize { int width; /* 矩形宽 */ int height; /* 矩形高 */ } CvSize;

13、cvPyrDown 功能:函数cvPyrDown使用Gaussian金字塔分解对输入图像向下采样 格式:void cvPyrDown(const CvArr* src,CvArr* dst,int filter = CV_GAUSSIAN_5x5); 参数:src:输入图像、dst:输出图像,其宽度和高度应是输入图像的一半;filter:卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。

时间: 2024-10-09 02:20:36

几个重要的函数opencv的相关文章

phase函数——opencv

使用示例: cvtColor(left, left, CV_BGR2GRAY); Sobel(left, grad1, CV_64FC1, 1, 0); //求梯度 Sobel(left, grad2, CV_64FC1, 0, 1); phase(grad1, grad2, angle, true); //求角度 double min, max; minMaxLoc(angle, &min, &max); cout << "min:" << m

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

atitit &#160;opencv apiattilax总结&#160;约500个函数 .xlsx

atitit  opencv apiattilax总结 约500个函数 .xlsx 1.1. CxCore中文参考手册 1 1.2. 机器学习中文参考手册  knn  svm  1 1.3. CvAux中文参考手册 立体匹配   3D Tracking PCA) Markov Models    \3 1.4. 图像处理  1 梯度.边缘和角点  2 采样.插值和几何变换  3 形态学操作 4 滤波器与色彩空间变换 5 金字塔及其应用  6 连接部件   7 图像与轮廓矩 8 特殊图像变换 9

opencv 访问图像像素的三种方式

访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols 表示行和列通道数可以通过channels()函数获得:void visitPix1(){ Mat srcImg = imread("jpg/1.jpeg"); Mat dstImg; srcImg.copyTo(dstImg); int rowNum = dstImg.rows; int

OpenCV 之 支持向量机 (一)

统计学习方法是由 模型 + 策略 + 算法 构成的,构建一种统计学习方法 (例如,支持向量机),实际上就是具体去确定这三个要素. 1  支持向量机 支持向量机,简称 SVM (Support Vector Machine),是一种二分分类模型. 1) 基本模型 (model) 定义在特征空间上的,一种间隔 (margin) 最大的,线性分类器 (linear classifier) 2) 学习策略 (strategy) 使间隔最大化,可转化为求解凸二次规划的问题. 3) 学习算法 (algori

OpenCV 之 边缘检测

上一篇 <OpenCV 之 图像平滑> 中,提到的图像平滑,从信号处理的角度来看,实际上是一种低通滤波器. 本篇中,数字图像的边缘,因为通常都是像素值变化剧烈的区域 (“高频”),故可将边缘检测视为“高通滤波” OpenCV 中,边缘检测常用的是索贝尔算子 (Sobel) 和拉普拉斯算子 (Laplace),分别是对图像求一阶导和二阶导 1  索贝尔算子 (Sobel) 1.1  计算过程 假定输入图像矩阵为 I,卷积核大小为 3x3,则水平一阶导数 Gx 和垂直一阶导数 Gy 分别为: $\

OpenCV 之 图像平滑

OpenCV 之 图像平滑 1  图像平滑 图像平滑,可用来对图像进行去噪 (noise reduction) 或 模糊化处理 (blurring),实际上图像平滑仍然属于图像空间滤波的一种 (低通滤波) 既然是滤波,则图像中任一点 (x, y),经过平滑滤波后的输出 g(x, y) 如下: g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t)g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t) 以 3X3 的滤波器为例 (即 a=b=1),则矩阵 Mx 和

OpenCV 之 图像分割 (一)

1  基于阈值 1.1  基本原理 灰度阈值化,是最简单也是速度最快的一种图像分割方法,广泛应用在硬件图像处理领域 (例如,基于 FPGA 的实时图像处理). 假设输入图像为 f,输出图像为 g,则经过阈值化处理的公式如下: $\quad g(i, j) = \begin{cases} 1 & \text{当 f(i, j) ≥ T 时} \\0 & \text{当 f(i, j) < T 时} \\ \end{cases} $ 也即,遍历图像中的所有像素,当像素值 f (i, j)

【计算机视觉】OpenCV人脸识别facerec源码分析2——LBPH概述

人脸识别 从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验.其源代码可以在OpenCV中的opencv\modules\contrib\doc\facerec\src下找到. 目前支持的算法有: Eigenfaces特征脸createEigenFaceRecognizer() Fisherfaces createFisherFaceRecognizer() Local Binary Patterns Histograms局部二值直方图 cr