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& color, int 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;