OpenCV常用API函数总结

OpenCV常用API函数总结

 

F1: 实现两个矩阵逐元素加权求和。

应用:将一个图像与另外一个图像混合;也可以调整图像的亮度和对比度。

addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype = -1);

eg: addWeighted(image, contrast, m, 0.0, 0, dst);

参数1:输入图像1;

参数2:第一个输入矩阵的权值;

参数3:与图像1大小和通道数相同的输入图像2;

参数4:第二个输入矩阵的权值;

参数5:偏置(偏移量);

参数6:与输入数组具有相同大小和通道数的输出数组。

计算公式:dst= src1* alpha +src2* beta +gamma

 

F2: 创建一个滚动条

createTrackbar(const String& trackbarname, const String& winname int* value, int count TrackbarCallback onChange = 0,void* userdata = 0);

eg: createTrackbar("Value Bar:", "亮度与对比度调整", &lightness,max_value,on_lightness, (void*)(&image))

参数1: 创建滑动条的名字;

参数2:将用作创建滑动条窗口的名称;

参数3:滑动条位置变量指针;

参数4:滑动条最大位置;

参数5:每次滑块改变位置时要调用的函数;

参数6:按原样传递给回调的用户数据。

 

F3: 图像颜色空间转换

cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 )

eg: cvtColor(image, dst, COLOR_BGR2GRAY);

参数1: 输入图像可以是:8位无符号、16位无符号(CV_16UC…),或32位浮点数;

参数2:输出图像具有与输入图像相同的尺寸和深度;

参数3:颜色空间转换的编码参数;

参数4:目标图像所需要的通道数,若默认值为0,则通道数由src中的通道数和转换编码确定。

 

F4: 图像风格转换

applyColorMap(InputArray src, OutputArray dst, int colormap)

eg. applyColorMap(image, dst, colormap[index % 19]);

参数1: 类型为CV_8UC1或CV_8UC3的灰度或彩色源图像;

参数2:输出图像是色彩映射后的源图像;

参数3:颜色编码表参数;

F5:逐元素按位与

bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());

eg. bitwise_and(m1, m2, dst);

参数1: 输入矩阵src1;

参数2:输入矩阵src2;

参数3:输出矩阵具有与输入矩阵相同大小和类型;

参数4:可选操作掩码,8位单通道矩阵,指定要更改的输出矩阵的元素;

 

 

F6: 逐元素按位或

bitwise_or(InputArray src1, InputArray src2,  OutputArray dst, InputArray mask = noArray());

eg. bitwise_or(m1, m2, dst)

参数1: 输入矩阵src1;

参数2:输入矩阵src2;

参数3:输出矩阵具有与输入矩阵相同大小和类型;

参数4:可选操作掩码,8位单通道矩阵,指定要更改的输出矩阵的元素;

 

F7: 逐元素按位取反

bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());

eg. bitwise_not(image, dst); //Mat dst = ~image;

参数1: 输入矩阵src;

参数2:输出矩阵具有与输入矩阵相同大小和类型;

参数3:可选操作掩码,8位单通道矩阵,指定要更改的输出矩阵的元素;

 

F8: 逐元素按位异或

bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());

eg. bitwise_xor(m1, m2, dst);

参数1: 输入矩阵src1;

参数2:输入矩阵src2;

参数3:输出矩阵具有与输入矩阵相同大小和类型;

参数4:可选操作掩码,8位单通道矩阵,指定要更改的输出矩阵的元素;

 

F9: 绘制/填充矩形轮廓

rectangle(InputOutputArray img, Rect rec, const Scalar& color, int thickness = 1,

  int lineType = LINE_8, int shift = 0);

eg:rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);

参数1: 输入图像;

参数2:矩形坐标信息;

参数3:矩形绘制的颜色;

参数4:正值,矩形的轮廓的粗细(绘制);负值,画一个填充的矩形(填充);

参数5:矩形边界的类型;(请参见线型)

参数6:点坐标中的小数位数。

 

F10: 绘制/填充圆形

circle(InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);

eg: circle(bg, Point(385, 220), 15, Scalar(0, 255, 0), 2, 8, 0);

参数1:输入图像;

参数2:圆的中心位置;

参数3:圆的半径;

参数4:圆的颜色;

参数5:正值,圆的轮廓的粗细(绘制)负值,画一个填充的圆(填充)

参数6:圆边界的类型。(请参见线型)

参数7:中心坐标和半径值中的小数位数

 

F11: 绘制线段

line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);

eg: line(bg, Point(235, 70), Point(385, 220), Scalar(255, 0, 255), 2, 8, 0);

参数1:输入图像;

参数2:线段起始坐标;

参数3:线段终止坐标;

参数4:线段的颜色;参数5:线宽;

参数6:画线的类型。(请参见线型);

参数7:点坐标中的小数位数。

 

F12: 绘制/填充椭圆

ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& colorint thickness = 1, int lineType = LINE_8);

eg: ellipse(bg, rrt, Scalar(0, 255, 180), 2, 8);

参数1:输入图像;

参数2:椭圆位置尺寸角度信息;

参数3: 绘制椭圆的颜色;

参数4:椭圆弧轮廓的厚度(如果为正值)。否则,这表示要绘制一个填充椭圆扇区。

参数5:椭圆边界的类型

 

F13: 通道分离(将多通道矩阵中的通道分成多个单个通道)

split(InputArray m, OutputArrayOfArrays mv);

eg.split(image, mv);

参数1:多通道输入矩阵;

参数2:矩阵的输出向量;

 

F14: 通道合并(mv中包含的矩阵被合并到输出矩阵dst中)

merge(InputArrayOfArrays mv, OutputArray dst);

eg.merge(mv, dst);//通道合并

 

参数1:待合并矩阵的输入向量(通道);

参数2:输出矩阵具有与mv[0] 相同的大小和深度;

F15: 对调不同通道顺序(通输入的图像中重新排列通道并将它们映射到输出图像的通道中)

mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts,

                            const int* fromTo, size_t npairs);

eg. mixChannels(&image, 1, &dst, 1, from_to, 3);

参数1:输入矩阵;所有矩阵的大小和深度必须相同;

参数2: src中的矩阵数;

参数3:输出矩阵;

参数4:dst中的矩阵数;

参数5:索引对整数矩阵,指定要交换的通道和位置;

参数6:“fromTo”中的索引对数。

 

F16: 创建一个二值图像 (src中的像素值位于lowerb和upperb之间时,dst相应的元素被设置为255,否则设置为0)

inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);

eg. inRange(hsv, Scalar(78, 43, 46), Scalar(99, 255, 255), mask);

参数1:输入矩阵;

参数2:src中的矩阵数;

参数3:包含下界矩阵;

参数4:包含下界矩阵;

参数5:输出矩阵具有与src相同的尺寸且是单通道的CV_8U类型;

 

F17: 计算输入矩阵中像素的平均值和标准差

meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask=noArray());

eg. meanStdDev(image, mean, stddev);

参数1:输入矩阵;

参数2:计算平均值;

参数3:计算标准差;

 

F18: 绘制一个多边形

polylines(InputOutputArray img, InputArrayOfArrays pts,

                            bool isClosed, const Scalar& color,

                            int thickness = 1, int lineType = LINE_8, int shift = 0 );

eg. polylines(canvas, pts, true, Scalar(0, 255, 255), 2, LINE_AA, 0);

参数1:输入图像;

参数2:多边形曲线数组;

参数3:绘制的多段线是否闭合的标志;

参数4:Scalar颜色标量;

参数5:线宽;

参数6:画多边形的类型。(请参见线型)

参数7:相对于左上角(0,0)的位置,对于roi绘制区域来说,参数7+相对位移

 

F19: 填充一个多边形

fillPoly(InputOutputArray img, InputArrayOfArrays pts,

                           const Scalar& color, int lineType = LINE_8, int shift = 0,

                           Point offset = Point() );

eg. fillPoly(canvas, pts, Scalar(255, 255, 0), LINE_AA, 0);

参数1: 输入图像;

参数2:多边形曲线数组;

参数3:Scalar颜色标量;

参数4:画多边形的类型。(请参见线型)

参数5:相对于左上角(0,0)的位置,对于roi绘制区域来说,参数7+相对位移

参数6:轮廓上所有点的可选偏移。

 

F20: 绘制一些轮廓

drawContours( InputOutputArray image, InputArrayOfArrays contours,

                              int contourIdx, const Scalar& color,

                              int thickness = 1, int lineType = LINE_8,

                              InputArray hierarchy = noArray(),

                              int maxLevel = INT_MAX, Point offset = Point() );

eg.drawContours(canvas, contours, -1, Scalar(255, 255, 0), -1, LINE_AA);

参数1:输入图像;

参数2:所有输入轮廓,每个轮廓都存储为一个点向量;

参数3:指示要绘制的轮廓的参数。如果为负,则绘制所有轮廓;

参数4:Scalar颜色标量;

参数5:线宽;为-1,则填充内部轮廓

参数6:画线的类型。(请参见线型)

 

F21: 创建鼠标事件

setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);

eg. setMouseCallback("鼠标绘制", on_draw, (void*)(&image));

参数1: 窗口的名字;

参数2:鼠标事件的回调函数;

参数3:传递给回调的可选参数。

 

F22: 调整输入图像的尺寸

resize( InputArray src, OutputArray dst,

                          Size dsize, double fx = 0, double fy = 0,

                          int interpolation = INTER_LINEAR );

resize(image, enlarge, Size(0, 0), 2, 2, INTER_LINEAR);

参数1:输入图像;

参数2:输出图像;

参数3:(当参数4:fx,参数5:fy均为零时,参数3起作用)输出图像大小(宽和高);

参数4:fx:(当参数3:Size(0,0)时,输出图像的宽按fx进行缩放)沿水平轴的比例因子;

参数5: fy:(当参数3:Size(0,0)时,输出图像的高按fy进行缩放)沿垂直轴的比例因子;

参数6:插值方法;

 

F23: 图像src被归一化,或者映射到一个特定范围内并放到dst中

normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,

       int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());

eg.normalize(image, dst, 1.0, 0, NORM_MINMAX);

参数1:输入图像;

参数2:输出图像具有与输入矩阵相同的尺寸;

参数3:归一化时的下限;

参数4:归一化时的上限;;

参数5: 归一化类型(方法);

 

F24: 图像翻转

flip(InputArray src, OutputArray dst, int flipCode);

eg. flip(image, dst, 0);

参数1:输入矩阵;

参数2:输出矩阵;

参数3:flipCode:0表示绕x轴翻转(上下翻转);

正值(例如,1)表示绕y轴翻转(左右翻转);

负值(例如, - 1)表示翻转围绕两个轴(180°旋转)。

 

F25: 获取图像旋转的转换矩阵M

Mat getRotationMatrix2D(Point2f center, double angle, double scale)

eg. M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);

参数1: 源图像中旋转的中心;

参数2: 旋转角度(度)。正值表示逆时针旋转(坐标原点假定为左上角);

参数3:比例因子

 

F26: 图像旋转

warpAffine( InputArray src, OutputArray dst,

                              InputArray M, Size dsize,

                              int flags = INTER_LINEAR,

                              int borderMode = BORDER_CONSTANT,

                              const Scalar& borderValue = Scalar());

eg. warpAffine(image, dst, M, Size(new_w, new_h), INTER_LINEAR, 0, Scalar(180, 0, 255));

参数1:输入图像;

参数2:输出图像;

参数3:转换矩阵;

参数4:输出图像的大小;

参数5:插值方法;

参数6:像素外推法;

参数7:边框颜色;

 

F27:计算某通道的直方图

calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform = true, bool accumulate = false );

Eg. calcHist(&bgr_plane[0], 1, 0, Mat(), b_hist, 1, bins, ranges);

参数1:输入图像数组;

参数2:输出图像的数量;

参数3:直方图的dims通道。0表示通道0;

参数4:Mask 非零区域才接受,才会做直方图的计算;这个参数不用,就表示完整的计算,所以Mat为空; 直方图的输出;

参数5: 直方图的维数;

参数6:每个维度中直方图的大小;

参数7:直方图的取值范围;

 

F28: 查找元素的最小值和最大值及其位置。

minMaxLoc(InputArray src, CV_OUT double* minVal,  CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,CV_OUT Point* maxLoc = 0, InputArray mask = noArray());

Eg.minMaxLoc(mv[i], &minv, &maxv, &minLoc, &maxLoc, Mat());

参数1:输入单通道数组;

参数2:返回最小值的指针;如果不需要,则使用NULL;

参数3:返回最大值的指针;如果不需要,则使用NULL;

参数4:返回的最小位置的指针(在2D情况下);如果不需要,则使用NULL;

参数5: 返回的最大位置的指针(在2D情况下);如果不需要,则使用NULL;

 

F29: 对灰度图像的直方图进行均衡处理。

equalizeHist( InputArray src, OutputArray dst );

Eg.equalizeHist(gray, dst);

参数1: 8位单通道源图像;

参数2:输出图像具有与src相同的大小和类型;

 

F30: 对输入的图像进行均值滤波。

 blur( InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1),

     int borderType = BORDER_DEFAULT );

 Eg.blur(image, dst, Size(13, 13), Point(-1, -1));

参数1:src输入图像;

参数2:dst输出图像具有与src相同的大小和类型;

参数3:模糊内核(卷积核)大小;

参数4:锚定点;默认值点(-1,-1)表示锚点位于内核中心;

参数5: 用于外推图像外部像素的边界模式,请参阅“边界类型”;

 

F31:高斯模糊

 

GaussianBlur( InputArray src, OutputArray dst, Size ksize double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );

Eg.GaussianBlur(image, dst, Size(0, 0), 15);

参数1:src输入图像;

参数2:dst输出图像具有与src相同的大小和类型;

参数3:高斯核(卷积核)大小;

参数4:高斯核在X方向的标准偏差;

参数5: 高斯核在Y方向的标准偏差;如果sigmaY为零,则设置为等于sigmaX;

 

F32:高斯双边模糊

bilateralFilter( InputArray src, OutputArray dst, int d  double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT );

Eg.bilateralFilter(image, dst, 0,100,10);

参数1:src输入图像;

参数2:dst输出图像具有与src相同的大小和类型;

参数3:滤波期间使用的每个像素邻域的直径。如果为非正,则从sigmaSpace计算。

参数4:在颜色空间中滤波sigma。参数值越大意味着像素邻域内的其他颜色(请参见sigmaSpace)将混合在一起,从而产生更大的半等色区域。;

参数5: 空间窗口的sigma;

 

 

 

你可能感兴趣的:(《OpenCV》学习笔记,opencv)