opencv自学笔记

合集下载

OpenCV学习笔记二

OpenCV学习笔记二

OpenCV学习笔记(二)五形态学操作形态学操作简单来讲,形态学操作就是基于形状的一系列图像处理操作。

通过将结构元素作用于输入图像来产生输出图像。

最基本的形态学操作有二:腐蚀与膨胀(Erosion 与Dilation)。

他们的运用广泛:消除噪声分割(isolate)独立的图像元素,以及连接(join)相邻的元素。

寻找图像中的明显的极大值区域或极小值区域。

腐蚀操作腐蚀在形态学操作家族里是膨胀操作的孪生姐妹。

它提取的是内核覆盖下的相素最小值。

进行腐蚀操作时,将内核B 划过图像,将内核B 覆盖区域的最小相素值提取,并代替锚点位置的相素。

我们使用腐蚀操作。

从下面的结果图我们看到亮区(背景)变细,而黑色区域(字母)则变大了。

腐蚀操作函数原型:void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )1可以看到前三个是必要的参数,后面都有默认的参数。

InputArray kernel腐蚀操作的内核膨胀操作此操作将图像A 与任意形状的内核(B),通常为正方形或圆形,进行卷积。

内核B 有一个可定义的锚点, 通常定义为内核中心点。

进行膨胀操作时,将内核B 划过图像,将内核B 覆盖区域的最大相素值提取,并代替锚点位置的相素。

显然,这一最大化操作将会导致图像中的亮区开始”扩展”(因此有了术语膨胀dilation )void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )12开运算(Opening)开运算是通过先对图像腐蚀再膨胀实现的。

opencv3编程入门学习笔记(一):基本函数介绍

opencv3编程入门学习笔记(一):基本函数介绍

opencv3编程⼊门学习笔记(⼀):基本函数介绍滤波blur (均值滤波)均值滤波是典型的线性滤波算法,主要⽅法为领域平均法(即⽤⼀⽚图像区域的各个像素的平均值来代替原图像中的各个像素值)缺点:不能很好的保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从⽽使图像变得模糊。

函数原型:void blur(InputArray src, OutputArrary dst, Size ksize , Point anchor=Point(-1, -1), int borderType = BORDER_DEFAULT)ksize : 核⼤⼩(kerneal size ),有点类似卷积核阈值化阈值可以被视为最简单的图像分割⽅法(基于图像中物体与背景之间的灰度差异)。

为了从图像中提取我们需要的部分,应该⽤图像中的每⼀个像素点的灰度值与选取的阈值进⾏⽐较,并进⾏相应的判断。

⼀旦找到了需要分割的物体的像素点,可以对这些像素点设定⼀些特定的值来表⽰。

可以将物体的像素点的灰度值设为 ”0“ (⿊⾊),其他像素点的灰度值为 ”255“ (⽩⾊)threshold (固定阈值操作)对灰度图像进⾏阈值操作,得到⼆值图像double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)src: 输⼊单通道数组dst: 处理后的结果thresh: 阈值的具体值maxval: 当像素值满⾜条件时,给该像素赋的值type : CV_THRESH_BINARY 、CV_THRESH_BINARY、CV_THRESH_BINARY_INVfindContours(InputArray img, OutputArray conours, OutputArray hierarchy, int mode, int method, Point offset=Point())img: 输⼊图像,需要为8 位单通道图像contours: 每个轮廓为⼀组点向量hierarchy:mode: 轮廓检索模式,。

Opencv学习笔记

Opencv学习笔记

Opencv 学习笔记软软件件下下载载:: /projects/opencvlibrary//index.php/Download/一、opencv 模块(主要):CV 主要的OpenCV 函数:图像处理与视觉算法;ML 机器学习、模式分类和回归分析,统计分离器;HighGUI 图像视频输入/出; CXcore 数据结构与线性代数支持,基本函数;二、常用的视频和图像处理:视频处理:以下处理的demo 在 <opencv-root>/samples/c/彩色跟踪 (camshiftdemo );点跟踪 (lkdemo );运动分割 (motempl);边缘检测 (laplace);图像处理: 以下图像的处理demo 在 <opencv-root>/samples/c/边缘检测 (edge);分割 ( pyramid_segmentation);形态学操作 (morphology);直方图 (demhist);距离变换 (distrans);椭圆拟合 (fitellipse);三、命名规则:OpenCV 使用近似匈牙利命名法的方法,比较值得一提的特色是:它的数据结构几乎都 是大写的Cv 开头,而它提供的函数都是小写的cv函数名:cvActionTargetMod(...) 提高了函数的可读性,指明用什么动作,哪个目标,用什么方法Action = 核心功能(core functionality ) (e.g. set, create)Target = 目标图像区域(target image area ) (e.g. contour, polygon)Mod = (可选的)调整语(optional modifiers ) (e.g. argument type)常遇到的状况有四种:1.cvActionTarget() E.g.:cvCreateImage(),cvNamedWindow()2.cvTarget() E.G.: cvMat(),cvSize(),cvPoint()3.cvMethod() E.g.:cvDCT()离散余弦变换算法 常用于算法或某方法4.cvActionMethod() E.g:cvFindContours()轮廓搜寻算法矩阵数据类型:CV_<bit_depth>(S|U|F)C<number_of_channels>Bit_depth = 位数,也叫做深度位数分別有1bit(黑白二值图),8bits,16bits,32bitsNumber_of_channels = 通道数S = 符号整型U = 无符号整型F = 浮点型E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵,CV_32FC2是指一个32位浮点型双通道矩阵.图像数据类型:IPL_DEPTH_<bit_depth>(S|U|F)E.g.: IPL_DEPTH_8U 图像像素数据是8位无符号整型.IPL_DEPTH_32F图像像素数据是32位浮点型.头文件:#include <cv.h>#include <cvaux.h>#include <highgui.h>#include <ml.h>#include <cxcore.h> // 一般不需要,cv.h 内已包含该头文件四、基础数据结构:CvPoint:OpenCV的基本数据类型之一,表示一个坐标为整数的二维点,是一个包含integer类型成员x和y的简单结构体。

OpenCV学习笔记(基于OpenCV 2.4)一:哈喽CV

OpenCV学习笔记(基于OpenCV 2.4)一:哈喽CV

原文地址:/archives/2632.htmlOpenCV学习笔记(基于OpenCV 2.4)一:哈喽CV0 写在最前面这份笔记主要记录自己一个简单的学习过程,此过程从OpenCV零基础开始到实现一个或若干个图像处理算法为止,中间可能会穿插部分自己遇到的比较典型的并认为需要记录的问题进行解析,每章节内容尽量做到简短而充实,方便学习及回顾。

此外,苦于很多初学者(我也是零基础)难以找到较新版本的OpenCV的中文学习资料或文档(旧版的1.X系列与2.X系列差距巨大,2.X是重构过的),因此,这份笔记也会针对OpenCV最新版官方文档(这里基于2.4.X版)里的一些基础内容进行翻译(相信大家走过了基础期,以后再读英文文档就不会那么费劲)。

笔者是国内某高校一小硕,研究方向为医学图像处理,将于2013年6月份毕业,因此,在2012年12月21世界末日到来之前,这份为零基础入门的学习笔记定会截稿,否则,小僧就毕不了业了。

当然,若干月后,小僧还会遇到类似的问题或发现笔记有不妥的地方,那么,小僧也会及时更新过来的。

摘要:本文主要在以下几个方面做介绍:1) OpenCV简介,什么是OpenCV;2) OpenCV的模块结构;3) OpenCV的下载、安装、配置及使用;4)OpenCV版HelloWorld代码及详解;关键词:OpenCV;OpenCV教程;OpenCV学习笔记;OpenCV中文教程;OpenCV下载;1 OpenCV简介OpenCV(Open Source Computer Vision)是一个用于实时处理的计算机视觉函数库,它基于BSD许可证授权并且可免费用于学术研究和商业应用。

它拥有C/C++、Python、和Java(仅用于Android)接口,并可在Windows、Linux、Mac和Android平台上运行。

OpenCV库包含大于2500个优化算法,拥有5M的下载量和47K+的用户群体。

Opencv学习笔记(四)图像的邻域操作(简单滤波算法)

Opencv学习笔记(四)图像的邻域操作(简单滤波算法)

Opencv学习笔记(四)图像的邻域操作(简单滤波算法)原理:很多时候,我们对图像处理时,要考虑它的邻域,⽐如3*3是我们常⽤的,这在图像滤波、去噪中最为常见,下⾯我们介绍如果在⼀次图像遍历过程中进⾏邻域的运算。

下⾯我们进⾏⼀个简单的滤波操作,滤波算⼦为[0 –1 0;-1 5 –1;0 –1 0]。

它可以让图像变得尖锐,⽽边缘更加突出。

核⼼公式即:sharp(i.j)=5*image(i,j)-image(i-1,j)-image(i+1,j )-image(i,j-1)-image(i,j+1)。

程序:#include "stdafx.h"#include "highgui.h"#include < Windows.h >#includeusing namespace std;using namespace cv;void ImgFilter2d(const Mat &image,Mat& result)//传进来的两个参数,第⼀个是要进⾏变换的图像,第⼆个是将要显⽰的结果图像{result.create(image.size(),image.type());//创建⼀个和image的⼤⼩类型都相同的空间int nr=image.rows;//⾏数int nc=image.cols*image.channels();//每⼀⾏有多少个通道for(int i=1;i{const uchar* up_line=image.ptr(i-1);//指向上⼀⾏const uchar* mid_line=image.ptr(i);//当前⾏const uchar* down_line=image.ptr(i+1);//下⼀⾏uchar* cur_line=result.ptr(i);//Mat::ptr()来获得指向某⾏元素的指针for(int j=1;j{cur_line[j]=saturate_cast(5*mid_line[j]-mid_line[j-1]-mid_line[j+1]-up_line[j]-down_line[j]);}}// 把图像边缘像素设置为0result.row(0).setTo(Scalar(0));result.row(result.rows-1).setTo(Scalar(0));result.col(0).setTo(Scalar(0));result.col(result.cols-1).setTo(Scalar(0));}void main(){Mat image;Mat image1;image = imread("E:\\2.jpg");namedWindow("tuxiang");int n = 4000;imshow("tuxiang", image);ImgFilter2d(image, image1);namedWindow("image1");imshow("image1", image1);waitKey(0);}结果显⽰:上⾯的程序有以下⼏点需要说明:1,staturate_cast是⼀个类型转换函数,程序⾥是为了确保运算结果还在uchar范围内。

OPENCV学习笔记

OPENCV学习笔记

OPENCV学习笔记1、键盘响应事件While(1){If(cvWaitKey(100)==27)break;}括号里为延时等待ms等于的数值为ASCLL码(27)ESC建。

2、回调函数callback键盘响应回调函数参数事件位置需要注册回调函数到OPCV中,实现注册的函数是Cvsetmousecallback(){const char*window_name,Cvmousecallback on_mouseVoid param=null.}第一个参数指定了回调函数需要注册到的窗口即产生事件的窗口。

只有在这个指定窗口中发生的事件才会掉用这个函数。

第二个参数为回调函数。

最后,第三个参数用来传递额外的信息给前面的void*param3、OPENCV的基本数据类型Points size rectangles scalar三元结构Cvpoint int x y图像中的点Cvpoint2D32f float x,y二维空间中的点Cvpoint3D32F float x,y,z三维空间中的点Cvsize int width height图像的尺寸Cvrect int x y width height图像的部分区域Cvscalar double val[4]RGBA值假设要在(5,10)(20,30)间画一个白色矩形,只需要简单调用Cvrectangle(Myimg,Cvpoint(5,10)Cvpoint(20,30)Cvscalar(255,255,255)//RGB值全满为白色);3、使用OPENCV时会频繁遇到Iplimage数据类型IplImage是我们用来为通常所说的“图像”进行编码的基本结构。

这些图像可能是灰度,色彩,4通道的(RGB+alpha),其中的每个通道可以包含任意的整数或浮点数。

因此,该类型比常见的、易于理解的3通道8位RGB图像更通用。

Ipllmage由cvmat派生,cvmat由cvarr派生。

opencv学习笔记

opencv学习笔记一、背景知识:(自己看这块的一些笔记)(1)数字电视的色彩空间和计算机不同,不是RGB空间,而是采用一个亮度信号(Y)和两个色差信号(R-Y、B-Y)的YUV空间或者叫YCbCr空间。

数字电视采用YUV(YCbCr)色彩空间的原因主要就是为了减少数据储存空间和数据传输带宽,同时又能非常方便的兼容黑白电视(R-Y和B-Y信号为零)(2)来源上的差异yuv色彩模型来源于rgb模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。

应用:basic color model used in analogue color TV broadcasting.YCbCr模型来源于yuv模型。

YCbCr is a scaled and offset version of the YUV color space.应用:数字视频,ITU-R BT.601 recommendation(3)YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。

人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。

主要的子采样格式有 YCbCr 4:2:0、YCbCr 4:2:2 和 YCbCr 4:4:4。

(4)皮肤检测主要是根据肤色在颜色空间上的分布特征来检测图像中的肌肤区域。

利用颜色信息对皮肤检测,应为不同人的肤色在排除亮度、室环境等影响对肤色的影响,皮肤的色调基本一致。

因此可以利用颜色信息来进行皮肤检测。

YCbCr色彩模型被广泛应用在电视的色彩显示领域。

CbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量,而且在空间将色度与亮度分离的特点。

且是二维独立分布,能较好的限制肤色分布区域。

通过对肤色的像素点在YCbCr空间投影,聚类得到了肤色聚类成椭圆形。

(5)首先采集肤色样本,进行颜色空间转化,并进行图像平滑处理,将噪声减小。

OpenCV学习笔记(一)

OpenCV学习笔记(一)摘要:由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的,所以我就想着研究一下这个库,这里是个人的学习笔记,不是什么权威的教程,如果你们有错误也麻烦帮我指出哈。

====================================== =======分割线========================================= =========前言:什么是OpenCV?可能还有人不清楚吧,简单地说,OpenCV——Open Source Computer Vision Library,即开源计算机视觉库,它是基于C语言和部分C++语言来开发,可用于计算机视觉、图像处理以及模式识别和跟踪。

一、准备工作:1.下载OpenCV安装包:到OpenCV的官网()下载最新版本的OpenCV安装包,由于OpenCV针对不同平台都有安装程序,所以我们只需要根据当前开发环境选择合适的平台版本即可,这里我们是在win7 64bit操作系统下进行开发,所以应该下载OpenCV for Windows:我们选择了当前的最新版本3.1,下载完毕后,我们得到其安装文件:opencv-3.1.0.exe2.安装Visual Studio 2015二、安装配置:1.安装:双击打开下载好的opencv-3.1.0.exe文件,进行安装(其实是解压),选择安装目录:安装完毕之后,在其安装目录下可以看到两个文件夹:build和sources,其中build是OpenCV使用时要用到的一些库文件,而sources中则是OpenCV为我们提供的一些demo示范源码:2.环境变量配置:上面步骤只是完成了安装,但是要能够正常使用OpenCV来进行开发,我们还需要进行环境变量的配置,我的电脑—>属性—>高级系统设置—>环境变量,找到Path变量,选中并点击编辑:64位系统的需要在path添加“;opencv安装路径\build 64\vc14\bin”(注:英文输入法中的“;”是分割符,用于与前面其他软件的配置参数分开),例如我的配置参数应该为:;E:\OpenCV\opencv\build 64\vc14\bin。

opencv笔记 二

异或操作bitwise_xor(变量,变量,输出变量)std::vector<Mat>mv;列:mv数组-mv[0],mv[1],mv[2],获取像素值split(image,mv)通道合并转换彩色图像merge(mv,输出变量)通道混合操作mixChannels(&image,&输出变量,1,数组名,数组里几对通道数)int 数组名[]={0,2,1,1,2,0}; 两两一对,共3对图像彩色空间转换-提取指定色彩区域inRange(变量图像名,Scalar(hsv最小值,hsv最小值,hsv最小值),Scalar(hsv最大值,hsv最大值,hsv最大值),输出变量)图像像素值统计求最小最大值minMaxLoc(image,&最小值变量,&最大值变量,&最小值的位置,&最大值的位置,Mat());Pointment 最小值的位置变量,最大值位置变量;图像像素值统计最小值min图像像素值统计最大值max图像像素值统计均值方差meanStdDev(image,变量1,变量2);图像像素值统计均值mean图像像素值统计标准方差standard deviation图像几何形状绘制绘制矩形Rect 等同于int 可以定义列:变量.x |y |width=100绘制矩形rectangle(image,Rect的变量,Scalar(0,0,255),大于等于0是线宽|小于0是填充,8,0)绘制圆形circle(image,Point(绘制的位置350,400),15是圆半径,Scalar(255,0,0),线宽和填充2,8,0)调节亮度addWeighted(image,0.7,Mat变量,0.3,0,变量输出dst)绘制线line(变量,Point(左上角坐标100,100),Point(右下角坐标350,400),Scalar(0,255,0),2,8或者LINE_AA反锯齿,0);绘制椭圆ellipse(image,rrt,Scalar(0,255,255),2,8);绘制椭圆-中心位置RotatedRect rrt;rrt.center=Point(200,200);绘制椭圆-大小弧度的高低rrt.Size(100,200)绘制椭圆-角度rrt.angle=0.0;随机数与随机颜色void drawing();//空函数Mat canvas=Mat::zeros(Size(512,512),CV_8UC3);int w=canvas.cols;int h=canvas.rows;RNG rng(12345);RNG 产生随机数while(true){ int c= waitKey(500);if(c==27){//退出break;}int x1=rng.uniform(0,w);int y1=rng.uniform(0,h);int x2=rng.uniform(0,w);int y2=rng.uniform(0,h);int b=rng.uniform(0,255);int g=rng.uniform(0,255);int r=rng.uniform(0,255);canvas=Scalar(0,0,0);//随机绘制一条线,不加上这个就是随机绘制多条线line(canvas,Point(x1,y1),Point(x2,y2),Scalar(b,g,r),1,LINE_AA,0);}多边形的填充与绘制Mat canvas=Mat::zeros(Size(512,512),CV_8UC3);Point p1(100,100);Point p2(350,100);std::vector<Point>pts;pts.push_back(p1);pts.push_back(p2);polylines(canvas,pts,true,Scalar(0,0,255),2,8,0);fillPoly(canvas,pts,Scalar(255,255,0)2,LINE_AA,0);//填充多边形一个API绘制多边形填充std::vector<std::vector<Point>>countours;contours.push_back(pts);drawContours(canvas,contours支持多个多边形,-1一次性绘制100个,Scalar(255,0,0),2填充); //-1一次性填充鼠标操作与响应Point sp(-1,-1);Point ep(-1,-1);Mat temp;static void on_draw(int event,int x,int y,int flas,void *userdata){Mat image=*((Mat*)userdata);if(event==EVENT_LBUTTONDOWN){sp.x=x;sp.y=y;std::cout<<"start point"<<sp<<std::endl;}else if(event==EVENT_LBUTTONUP){ep.x=x;ep.y=y;int dx=ep.x-sp.x;int dy=ep.y-sp.y;if(dx>0&&dy>0){Rect box(sp.x,sp.y,dx,dy);rectangle(image,box,Scalar(0,0,255),2,8,0);imshow("鼠标绘制",image);imshow("截取区域",image(box));sp.x=-1;sp.y=-1;}}else if(event==EVENT_MOUSEMOVE){if(sp.x>0&&sp.y>0){ep.x=x;ep.y=y;int dx=ep.x-sp.x;int dy=ep.y-sp.y;if(dx>0&&dy>0){Rect box(sp.x,sp.y,dx,dy);temp.copyTo(image);rectangle(image,box,Scalar(0,0,255),2,8,0);imshow("鼠标绘制",image);}}void QuickDemo::mouse_drawing_demo(Mat &image){ namedwindow("鼠标绘制",WINDOW_AUTOSIZE); setMouseCallback("鼠标绘制",on_draw,(void*)(&image)); imshow("鼠标绘制",image);temp=image.clone();}。

opencv笔记

opencv笔记⼀ Contour FindingContours使⽤ STL-style vector<> 表⽰,如 vector<cv::Point>, vector<cv::Point2f>。

opencv 中,使⽤函数 cv::findContours() 寻找contours,具体函数定义如下:void cv::findContours(cv::InputOutputArray image,cv::OutputArrayofArrays contours,cv::OutputArray hierarchy,int mode,int method,cv::Point offset = cv::Point());void cv::findContours(cv::InputOutputArray image,cv::OutputArrayofArrays contours,int mode,int method,cv::Point offset = cv::Point());参数 image 为8位单通道输⼊图像,⼀般情况下,该图像可能由 cv::threshold(),cv::adaptiveThreshold ⽣成。

当 image 由 cv::Canny() ⽣成时,cv::findContours() 仅当边缘图像为宽度为1的细区域图像,对于闭合边缘,可以使⽤内边缘或者外边缘代替边缘图像进⾏后续分析;但对于⾮闭合边缘,个⼈认为 cv::Canny() ⽣成的边缘图像不适合使⽤ cv::findContours()进⾏查找;替代⽅案是使⽤边缘跟踪算法,将 cv::Canny() ⽣成边缘保存在 vector<cv::Point>中,然后使⽤ Contours 相关分析进⾏更多分析。

参数 contours 为 vector<vector<cv::Point>>, vector<vector<cv::Point2f>>, 使⽤ array of arrays 结构可以同时保存多条 contours。

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

OPENCV
一、Opencv 基本架构分析
多模块组合起来的一个软件开发工具包(SDK)
1、【calib3d】
2、【cntrib】
3、【core】:核心功能模块。

4、【imgproc】:图像处理模块。

5、【features2d】
6、【flann】
7、【gpu】
8、【highgui】:高层GUI图形用户界面,包含媒体的输
入输出、视频捕捉、图像视频的编码和解码、图形交互界面的接口内容等。

9、【legacy】

二、HighGui图形用户界面初步
1、opencv的命名空间:opencv的C++类和函数都是定
义在命名空间cv之内的,访问方法:(1)、在代码
开头的适当位置加上using namespace cv (2)、在
使用opencv的每个内和函数时,都加入cv::命名
空间。

2、图像的载入:imread()函数
Mat imread(const string& filename, int flags=1);
(1)、const string&类型的filename,填我们需要载
入的图片路径名称。

(2)、int类型的flags,为载入标志,它指一个加载
图像的颜色类型。

3、图像的显示:imshow()函数
Void imshow(const string& winname, InputArray mat);
(1)、const string&类型的winname,填需要显示的窗口标识名称。

(2)、InputArray类型的mat,填需要显示的图像。

4、创建窗口:namedWindow()函数
void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE);
(1)、const string&类型的name,填写被作用窗口的标识符的窗口名称。

(2)、int类型的flags,窗口的标识,可填写WINDOW_AUTOSIZE、WINDOW_NORMAL或WINDOW_OPENGL
5、输出到文件:imwrite()函数
bool imwrite(const string& finename, InputArray img , const vector<int>& params=vector<int>() );
(1)、const string&类型的finename,填需要写入的文件名。

注意带上后缀,如“123.jpg”
(2)、InputArray类型的img,一般填一个Mat类型的图像数据。

(3)、const wector<int>&类型的params,表示为特定格式保存的参数编码。

它有默认值vector<int>0,所以一般情况下不需要写。

6、创建滑动条:createTrackbar()函数
C++: int createTrackbar(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
(1)、conststring&类型的trackbarname,轨迹条的名字,用来代表我们创建的轨迹条。

(2)、conststring&类型的winname,窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填写的某一个窗口名。

(3)、int*类型的value,一个指向整形的指针,表示滑块的位置。

在创建时,滑块的初始位置就是该变量当前的值。

(4)、int类型的count,表示滑块可以达到的最大位置的值。

滑块最小位置的值始终为0.
(5)、TrackbarCallback类型的onChange,它有默认
值0。

这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。

并且这个函数的原型必须为void XXX(int void*);,其中第一个参数是轨迹条的位置,第二个参数是用户数据。

如果回调是NULL指针,则表示没有回调函数的调用,仅第三个参数value有变化。

(6)、void*类型的userdata,默认值0.这个参数是用户传给回调函数的数据,用来处理轨迹条事件。

如果使用的第三个参数value实参是全局变量的话,完全可以不去管userdata参数。

7、获取当前轨迹条的位置:getTrackbarPos()函数
C++: int getTrackbarPos(conststring& trackbarname, conststring& winname);
(1)、conststring&类型的trackbarname,表示轨迹条的名字。

(2)、conststring&类型的winname,表示轨迹条的父窗口的名称。

8、鼠标操作:SetMouseCallback()
C++: void SetMouseCallback(conststring& winname, MouseCallback onMouse, void* userdata=0)
(1)、conststring&类型的winname,窗口的名字。

(2)、MouseCallback类型的onMouse,指定窗口里每次鼠标时间发生的时候,被调用的函数指针。

这个
函数的原型大概为void Foo(int event, int x, int y, int flags, void* param)。

其中event是EVENT_+变量之一,x、y是鼠标指针在图像坐标系中的坐标值,flags是EVENT_FLAG的组合,param是用户定义的传递到SetMouseCallback函数调用的参数。

如EVENT_MOUSEMOVE为鼠标移动消息、EVENT_LBUTTONDOWN为鼠标左键按下消息等。

(3)、void*类型的userdata,用户定义的传递到回调函数的参数,默认值0。

相关文档
最新文档