opencv基础函数汇总

来源:互联网 发布:淘宝推荐话术 编辑:程序博客网 时间:2024/06/05 02:58
颜色
Scalar(int,int,int);//蓝,绿,红


复制
src.copyTo(dst,edge);
//把src赋值给dst,在把edge掩盖在dst上


画椭圆
ellipse(Mat,Point,Size,angle,0,360,Scalar,int,int);
//原图,中心点,大小,旋转角,扩展弧度0-360,线条粗细,线条类型


画圆形
circle(Mat,Point,int,Scalar,int,int);
//原图,中心点,半径,颜色,线条粗细,线条类型


画多边形
fillPoly(Mat,Point**,int*,int,Scalar,int);
//原图,顶点指针数组,顶点个数数组,多边形数量,线条颜色,线条类型
//第二个参数:Point rookPoints[1][20];rookPoint[0][0]=Point(1,1);....
//           const Point*ppt[1]={rookPoints[0]};
//第三个参数:int npt[]={20};


画线
line(Mat,Point,Point,Scalar,int,int);
//原图,起点,终点,颜色,线条粗细,线条类型


矩形
Rect(int,int,int,int);
//左上角坐标x,y,宽,高


滑动条
createTrackbar(string&,string&,int*,int,TrackbarCallback,void*);
//滑条名字,窗口名字,滑条数值,滑条最大值,回调函数原型为void XX(int,void*),回调函数数据可省略)
//createTrackbar("阈值:","效果图",&g_nValue,g_maxValue,on_Begin);
//void on_Begin(int,void*);












<----------------------------------core----------------------------->
获取像素
image.at<Vec3b>(i,j)[0]=0;
//第i行,j列,0为蓝色通道,1为绿色通道,2为红色通道,若要获取3透明通道则要Vec4b


感兴趣区域
Mat imageROI=srcImage(Rect(500,250,logo.cols,logo.rows);
//得到srcImage矩形区域的地址


数组加权
addWeighted(Mat,double,Mat,double,double,Mat,int);
//图1,图1权重,图2,图2权重,混合图片亮度,输出图,深度(可省略)


分离通道
split(Mat,vector<Mat>);
//原图,分离得到的通道
//split(srcImage,channels);//分离通道
//channels.at(0);//获取蓝色通道


组合通道
merge(vector<Mat>,Mat);
//通道,输出图
//merge(channels,srcImage);


g(x)=a*f(x)+b;
//f(x)原图像素
//g(x)效果图像素
//a为对比度
//b为亮度


XML和YAML写入
FileStorage fs("test.yaml",FileStorage::WRITE);
fs<<"frameCount"<<5;
fs.release();


XML和YAML读取
FileStorage fs("test.yaml",FileStorage::READ);
int frameCount=(int)fs["frameCount"];
fs.release();














<----------------------------------imgproc----------------------------->
方框滤波
boxFilter(Mat,Mat,int,Size,Point,bool,int);
//原图,输出图,图像深度-1为原始深度,内核大小,(锚点,是否归一化,边界类型)


均值滤波
blur(Mat,Mat,Size,Point,int);
//原图,输出图,内核大小,(锚点,边界类型)


高斯滤波
GaussianBlur(Mat,Mat,Size,double,double,int);
//原图,输出图,内核大小,x标准偏差,y标准偏差(若xy为0由图片宽和高指定),(边界类型)


中值滤波
medianBlur(Mat,Mat,int);
//原图,输出图,孔径(必须为大于1的奇数)


双边滤波(可保留图片细节)
bilateralFilter(Mat,Mat,int,double,double,int);
//原图,输出图,像素临近直径,越大领域内越广颜色会被混合,越大受越远像素影响,(边界类型)


膨胀(求局部最大值)
dilate(Mat,Mat,Mat,Point,int,int,Scalar);
//原图,输出图,膨胀操作核,(锚点,函数迭代次数,边界模式,边界值)
//第三个参数:Mat element=getStructuringElement(MORPH_RECT,Size(15,15));
//若有滑条,则:  element=getStructuringElement(MORPH_RECT,
//                        Size(2*g_nValue+1,2*g_nValue+1),Point(g_nValue,g_nValue));


腐蚀(求局部最小值)
erode(Mat,Mat,Mat,Point,int,int,Scalar);
//原图,输出图,膨胀操作核,(锚点,函数迭代次数,边界模式,边界值)
//第三个参数:Mat element=getStructuringElement(MORPH_RECT,Size(15,15));
//若有滑条,则:  element=getStructuringElement(MORPH_RECT,
//                        Size(2*g_nValue+1,2*g_nValue+1),Point(g_nValue,g_nValue));


开运算(膨胀->腐蚀)//去除图像中较小区域
闭运算(腐蚀->膨胀)//填充小型黑洞
顶帽(原图-开运算)//突出比原图轮廓周围的区域更明亮的区域,用来分离比临近点亮一些的斑块
黑帽(闭运算-原图)//突出比原图轮廓周围的区域更暗的区域,用来分离比临近点暗一些的斑块
形态学梯度(膨胀-腐蚀)//对二值图操作可以将团块的边缘突出,用来保留物体的边缘轮廓
morphologyEx(Mat,Mat,int,Mat,Point,int,int,Scalar);
//原图,输出图,运算类型,内核,(锚点,迭代次数,边界模式,边界值)
//第三个参数:MORPH_OPEN       开运算
             MORPH_CLOSE      闭运算
             MORPH_GRADIENT   形态学梯度
             MORPH_TOPHAT     顶帽
             MORPH_BLACKHAT   黑帽
             MORPH_ERODE      腐蚀
             MORPH_DILATE     膨胀




漫水填充(把选中的种子点相连的区域替换成指定颜色)
floodFill(Mat,Point,Scalar,Rect*,Scalar,Scalar,int);
floodFill(Mat,Mat,Point,Scalar,Rect*,Scalar,Scalar,int);
//原图,掩膜,漫水填充起始点,染色值,默认值0用于设置重绘区域最小边界,
//当前像素值与其领域像素值或者待加入像素值之间的亮度或颜色负差,
//当前像素值与其领域像素值或者待加入像素值之间的亮度或颜色正差,
//(标识符)




尺寸调整
resize(Mat,Mat,Size,double,double,int);
//原图,输出图,输出图大小,水平缩放系数,垂直缩放系数,(线性插值)
//例子:resize(srcImage,dstImage,Size(),0.5,0.5);


阈值化
threshold(Mat,Mat,double,double,int);
//原图,输出图,阈值具体值,参数五阈值最大值如:255,阈值模式


矩阵绝对值
convertScaleAbs(Mat,Mat);
//输入矩阵,输出矩阵


Canny算子
Canny(Mat,Mat,double,double,int,bool);
//原图,输出图,滞后性阈值1,滞后性阈值2,孔径大小,是否计算图像梯度幅值


Sobel算子
Sobel(Mat,Mat,int,int,int,int,double,double,int);
//原图,输出图,深度,x上差分阶数,y上差分阶数,内核必须为1、3、5、7,
//放缩因子(默认1),输出图可选的delta值(默认0),边界模式
//输出图要取绝对值


Laplacian算子(拉普拉斯算子)
Laplacian(Mat,Mat,int,int,double,double,int);
//输入图,输出图,深度,孔径(必须为正奇数),比例因子,存入目标图的delta(默认0),边界模式//(BORDER_DEFAULT)


Scharr滤波器
Scharr(Mat,Mat,int,int,int,double,double,int);
//输入图,输出图,深度,x差分阶数,y差分阶数,放缩因子,存入目标图的delta(默认0),边界模式
//(BORDER_DEFAULT)


霍夫变换(检测图像边缘返回线条)
HoughLines(Mat,vector<Vec2f>,double,double,int,double,double);
//原图,输出线,rho,theta,阈值(大于阈值的线可检测出),
//多尺度霍夫变换(默认0),多尺度霍夫变换(默认0)
//lines[i][0]为rho,line[i][1]为theta,line[i][2]为x,line[i][3]为y


霍夫圆变换
HoughCircle(Mat,vector<Vec3f>,int,double,double,double,double,int,int);
//原图,输出圆,检测方法,图像分辨率比(默认1),圆心之间最小距离,
//检测返回参数,越大检测圆越完美,圆半径最小值,圆半径最大值
//circle[i][0]圆心行,circle[i][1]圆心列,circle[i][2]圆半径
//由于返回值为double要用cvRound进行四舍五入


累计概率霍夫变换
HoughLinesP(Mat,vector<Vec4f>,double,double,int,double,double,);
//原图,输出线,rho,theta,大于该值的线才能被检测到,最低线段长度,允许同一行点连接的最大距离
//第二个参数:x1,y1,x2,y2对应为line[0],line[1],line[2],line[3]


重映射(把图片翻转)
remap(Mat,Mat,Mat,Mat,int,int,Scalar);
//原图,输出图,列变换,行变换,插值方式CV_INTER_LINEAR,
//边界模式BORDER_CONSTANT,有常数边界时的值(默认0)


仿射变换(把图片绕自身旋转)
getRotationMatrix2D(Point2f,double,double);
//图像旋转中心,旋转角度,缩放系数


直方图均衡化(对颜色充分利用)
equalizeHist(Mat,Mat);
//输入图,输出图


寻找轮廓
findContours(Mat,vector<vector<Point>>,vector<Vec4i>,int,int,Point);
//原图,输出轮廓(每个轮廓为一个点向量),获取前后轮廓,轮廓检索模式(CV_RETR_CCOMP),
//获取轮廓近似方法(CV_CHAIN_APPROX_SIMPLE),(每个轮廓点可选的偏移量)
//第3个参数:hierarchy[i][0]--hierarchy[i][3]表示后一轮廓、前一轮廓、父轮廓、内嵌轮廓,无轮廓时返回负数


画出轮廓
drawContours(Mat,vector<vector<Point>>,int,Scalar,int,int,vector<Vec4i>,int,Point);
//输出图,输入轮廓,轮廓指示变量(负值为绘制所以轮廓),轮廓颜色
//线条粗细,线条类型(默认8),可选的层次结构,(绘制轮廓的最大等级,可选的轮廓偏移参数)


寻找凸包
convexHull(Mat(vector<Point>),vector<int>,bool,bool);
//输入的二维点集,输出凸包,操作方向(真为顺时针),真为返回凸包各点


分水岭算法(自己勾画出期望分割的区域)
watershed(Mat,Mat);
//输入图,输出图


图像修补
inpaint(Mat,Mat,Mat,double,int);
//原图,修复掩膜(其中非零像素表示需要修补的区域),输出图,
//需要修补的点的圆形半径,修补方法(INPAINT_TELEA)


计算直方图
calcHist(Mat*,int,int*,Mat,MatDN,int,int*,float**,bool,bool);
//输入图,图片个数,通道数,掩码,输出直方图,直方图维度,直方图尺寸数组,一维数组取值,
//直方图是否均匀,累计标识符
//第三个参数:int channels[]={0,1};
//第四个参数:Mat()表示不使用掩码
//第六个参数:float hueRanges[]={0,180}; //色调范围0-179
             float saturationRanges[]={0,256};  //饱和度范围0-255 
             float* ranges[]={hueRanges,saturationRanges}


寻找最值
minMaxLoc(Mat,double*,double*,Point*,Point*,Mat);
//输入单通道列阵,返回最小值(可为NULL),返回最大值,
//返回最小值点(可为NULL),返回最大值点,掩膜(如0)


对比直方图
double compareHist(Mat,Mat,int);
//直方图1,直方图2,方法0-3


反向投影(寻找一片区域中一个大块)
calcBackProject(Mat*,int,int*,MatDN,MatND,float**,double,bool);
//输入数组,输入数组个数,需要统计的通道,输入直方图,反向投影列阵,
//每一维取值范围,放缩因子,直方图是否均匀
//第六个参数:flaot hun_range[]={0,180};   float* ranges={hue_range};


模板匹配
matchTemplate(Mat,Mat,Mat,int);
//原图,模板图,映射图像,匹配方法
//第三个参数:大小必须为(src-temp+1)*(src-temp+1)
//通过寻找最值点可以找出匹配位置,不同方法最值不同,可为最大,也可为最小






















<----------------------------------feature2d----------------------------->


Harris角点检测
cornerHarris(Mat,Mat,int,int,int,double,int);
//原图,输出图,邻域大小,Sobel的内核,参数(0.01),(边界模式)


Shi-Tomasi角点检测
goodFeaturesToTrack(Mat,vector<Point2f>,int,double,double,Mat,int,bool,double);
//原图,输出角点,角点最大数量,最小特征值(0.01),角点间最小距离,
//感兴趣区域(Mat()),领域范围(默认3),是否使用Harris角点检测,权重系数(0.04)


寻找亚像素角点
cornerSubPix(Mat,vector<Point2f>,Size,Size,TermCriteria);
//原图,角点初始坐标,搜索窗口的一半尺寸,死区的一半尺寸,角点迭代终止条件


绘制关键点
drawKeypoints(Mat&,vector<KeyPoint>&,Mat&,Scalar&,int);
//原图,输出特征点,输出图,关键点颜色,绘制关键点特征标识符(DrawMatchesFlags::DEFAULT)


绘制相匹配两图像关键点
drawMatches(Mat&,vector<KeyPoint>&,Mat&,vector<KeyPoint>&,vector<DMatch>&,
Mat&,Scalar&,Scalar&,vector<char>&,int);
//图1,特征点1,图2,特征点2,图1到图2的匹配点,输出图,(线和关键点颜色,单一特征点颜色,
掩膜哪些匹配会绘制出,绘制标识符(DrawMatchesFlags::DEFAULT))