当前位置:首页 > OpenCV学习笔记
cvWaitKey()这个函数在一个给定的时间等待用户按键触发。cvWaitKey()可以接收0作为参数,在这种情况下,cvWaitKey()会无限期地等待,直到用户触发一个按键。
鼠标事件
鼠标事件相应采用回调函数的方式来处理,为了可以相应鼠标点击事件,首先必须创建一个回调函数,是鼠标点击事件发生时OpenCV可以调用这个函数。
回调函数的格式:
Void CvMouseCallback(int event,int x,int y,int flags, void*param);
第二个以及第三个参数会被设置成事件发生时鼠标位置的x,y坐标值。这些坐标代表窗口中图像的像素坐标,与窗口的大小没有关系。
第四个参数flags ,每一位指定了在事件发生时的不同状态。 Param可以用来以任何结构方式传递额外的参数信息
注册回调函数
Void cvSetMouseCallBack (
const char* window_name,/////指定回调函数要注册到的窗口 CvMouseCallback on_mouse, ///回调函数 void* param=NULL);////传递额外的信息给void* param 参数
Sliders ,Trackbars,和Switches
滑动条被指定了一个独立的名称(字符串形式),并且后面使用此名称来制定这个滑动条。
Int cvCreateTracker(
Const char* trackba_name,////滑动条的名字
Const char* widow_name,///滑动条附属的窗口名字
Int* value,///当滑动条被拖动时,OpenCV自动将当前位置所代表的值传给指针指向的整数 Int count ,/////滑动条所能表示的最大值
CvTrackbarCallback on_change///指向回滑函数的指针,当滑动条被拖动时,回滑函数会自动调用。 );
CvTrackCallback定义如下: Void(*callback)(intposition)
Int cvGetTrackbarPos(////用于读取滑动条value的值 const char* track_name, Const char* window_name );
Void cvSetTrackbarPos( const char* track_name,
Const char* window_name Int pos );
无按钮
用只有两个取值的滑动条来代替按钮,开关(switch)事实上就是只有两个状态的滑动条,这个状态是“on”和“off”。
视频的处理
CvCapture* cvCreateFileCapture(const char* filename);///只需要将MPG或AVI视频文件名 CvCapture* cvCreateCameraCapture(int index);
读视频
Int cvGrabFrame(CvCapture* capture);
IplImage* CvRetrieveFrame(CvCapture* capture); IplImage* cvQueryFrame (CvCapture* capture);
ConvertImage函数//用于不同图像格式之间转换 Void ConvertImage(const CvArr* src, CvArr* dst,
int flags=0///垂直旋转图像 );
第5章 图像处理
图像处理:使用图像结构中所定义的高层处理方法来完成特定任务,这些任务是图形和视觉范畴的任务。
平滑处理(模糊处理)
OpenCV提供的平滑操作方法都是由cvSmooth函数实现,该函数可以将用户所期望的平滑方式作为参数。
Void cvSmooth(
Const cvArr* src,//平滑操作的输入图像 CvArr* dst,///平滑操作的结果 Int smootype =CV_GAUSSIAN, Int param1=3, Int param2=0, Double param3=0,
Double param3=0,////这些参数的含义取决于smoothtype的值 );
CV_BLUR (简单模糊)对每个像素param1*param2领域求和,并缩放1/(param1*param2) CV_BLUR_NO_SCALE(简单无缩放变换的模糊)对每个像素的param1*param2领域求和 CV_MEDIAN(中值模糊)对图像核进行大小为param1*param2的中值滤波 CV_GAUSSIAN(高斯模糊)对图像进行大小为param1*param2的高斯卷积 CV_BILATERAL(双边滤波)应用双线性3*3滤波,颜色sigma=param1,空间sigma=param2
图像形态学
基本的图像转换是膨胀与腐蚀
膨胀是指将一些图像(或图像中德一部分区域成为A)与核(称为B)进行卷积,核可以是任何的形状或大小,他拥有一个单独定义出来的参考点,多数情况下,核是一个小的中间带有参考点的实心正方形或圆盘。核可以视为模板或掩码,膨胀是求局部最大值的操作。
腐蚀是膨胀的反操作,腐蚀操作要计算核区域像素的最小值,腐蚀可以通过下面的算法生成一个新的图像:当核B与图像卷积时,计算被B覆盖区域的最小像素值,并把这个值放到参考点上。
膨胀可以填补凹洞,腐蚀可以消除细的凸起。
膨胀函数cvErode()和腐蚀函数cvDilate()都有源图像和目标函数参数 Void cvErode( IplImage* src,
IplImage* dst,
IplConvKernel* B=NULL,//是核当为空时,所使用的是参考点位于中心3*3核 int interations=1////迭代的次数 );
Void cvDilate( IplImage* src,
IplImage* dst,
IplConvKernel* B=NULL, int interations=1 );
当OpenCV执行cvErode()函数时,将某点p的像素值设为与p对应的核覆盖下所有点中的最小值,同样的,对于执行膨胀操作时,将取最小值换为取最大值:
自定义核 创建
IplConvKernel* cvCreateStructuringElementEx(
Int cols,
Int rows,///行和列确定了所构成矩形大小
Int anchor_x,//是核的封闭矩形内参数点的横纵左边(x,y) Int anchor_y, Int shape,//形状
Int* values=NULL///value在封闭矩形内定义核的形状 ); 释放
Void cvRealseStructuringElement(IplConvKernel** element);
IplConvKernel的形状取值 CV_SHAPE_RECT 核是矩形
CV_SHAPE_CROSS 核是十字交叉形 CV_SHAPE_ELLIPSE 核是椭圆形
CV_SHAPE_CUSTOM 核是用户自定义的值
更通用的形态学
在处理布尔图像和图像掩码时,基本的腐蚀和膨胀操作通常是足够的,然而,在处理灰度或彩色图像时,需要使用cvMorphologyEx()函数 Void cvMorphologyEx(
Const CvArr* src, CvArr* dst,
共分享92篇相关文档