opencv函数(基础简略版)
做考核任务的过程中,我感觉还是有必要写一些笔记-增加opencv的熟练度并且加深对函数的理解。
特在此总结一下opencv的常用函数(C++)
1.imread函数
读取图片文件,接收两个参数
第一个参数:图片的路径
第二个参数:读取图片的形式(有默认值)
- IMREAD_COLOR 加载彩色图片,这个是默认参数,可以直接写1
- IMREAD_GRAYSCALE 以灰度模式加载图片,可以直接写0
- IMREAD_UNCHANGED 包括alpha通道,可以直接写-1
2.imshow函数
显示图片,接收两个参数
第一个参数:图片的标题“字符串”
第二个参数:要显示的图像的矩阵Mat
3.cvtColor函数
void cv::cvtColor(InputArrat src,//输入图像
OutputArray dst,//输出图像
int code,//颜色的映射类型
int dstCn=0)
常用来将一张彩色图片,转换为一张灰度图
第三个参数:最常用COLOR_BGR2GRAY
COLOR_BGR2HSV
COLOR_BGR2HLS
4.threshole函数
void threshold(InputArray src,//输入图像
OutputArray dst,//输出图像
double thresh,//阈值
double maxval,//最大值
int type)//5种阈值化形式
第五个参数:
THRESH_BINARY:当点的值大于阈值时,取Maxval,反之设为0
THRESH_BINARY_INV:当前点值大于阈值时,设为0,反之设为Maxval
THRESH_TRUNC:当前点大于阈值时,设置为阈值,否则不改变
THRESH_TOZERO:当前点值大于阈值时不改变,否则设为0
THRESH_TOZERO_INV:当前点值大于阈值时,设置为0,反之不改变
5.findContours函数
void cv::findContours(InputOutputArray image,//输入图像
OutputArrayOfArrays contours,//输出轮廓
OutputArray hierarchy,
int mode,
int method,
Point offset=Point()
)
一般图像findContours()处理前需要进行二值化处理
第二、三个参数:
经常在和以下代码搭配
vector<vector<Point> >contours;
vector<Vec4i> hierarchy;
contours中的每一组Point点集就是一个轮廓
hierarchy内的元素和contours内的元素是一一对应的,hierarchy中的四个int型变量分别表示第i个轮廓的后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓
第四个参数:
轮廓的检索模式
RETR_EXTERNAL 只检测最外围轮廓
RETR_LIST 检测所有轮廓,并且轮廓间彼此独立
RETR_CCOMP 检测所有的轮廓,所有的轮廓之间里两个关系
RETR_TREE 检测所有轮廓,并建立一个等级树结构
第五个参数:
轮廓的近似方法
CHAIN_APPROX_NONE 保存物体边界上所有的轮廓点
CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息
CHAIN_APPROX_TC89_L1,CHAIN_APPROX_TC89_KCOS使用teh-Chinlchain近似算法
第六个参数:
Point偏移量,所有轮廓信息相对于图像的偏移量
6、drawContours函数
void drawContours(OutputArray image,//输出图像
InputArrayOfArrays contours,//轮廓,findContours
int contourIdx,//轮廓的索引号
const Scalar& color,//线条的颜色
int thickness=1,//线条的宽度
int lineType=8,//线条的类型
InputArray hierarchy=noArray(),//轮廓的结构信息
int maxLevel=INT_MAX,
Point offset=Point() )
第三个参数:
如果该参数为负值,则画所有的轮廓
7、contourArea函数
double contourArea(InputArray contour, //输入的图像
bool oriented=false)//某一个方向
8、approxPolyDp函数
对指定的点集进行多边形逼近,其逼近的精度可通过参数设置。
void approxPloyDP(InputArray curve,//点集
OutputArray approxCurve,//输出的点集
double epsilon,//指定的精度
bool close//是否闭合
)
给出一个参数的例子
/* 对每个轮廓计算其凸包*/
vector<vector<Point> >poly(contours.size());
for (int i = 0; i < contours.size(); i++){
approxPolyDP(Mat(contours[i]), poly[i], 5,true);
//可以先转换成一个将轮廓转换成
}
9、canny函数
void Canny(InputArray src,//原图像
OutputArray dst,//输出图像
double threshold1,//阈值1
double threshold2,//阈值2
int aperture_size=3,//sobel算子的孔径大小,默认为3
bool L2gradient=false
)
10、addWeight函数
void addWeighted( const CvArr* src1,//第一张图片
double alpha,//第一个图片的权重
const CvArr* src2,//第二张图片
double beta,//第二张图片权重
double gamma, //求和后添加的数值
CvArr* dst//输出图片
)
11、blur函数
均值滤波
void blur(InputArray src,//原图片
OutputArray dst, //输出图片
Size ksize, //内核的大小
Point anchor=Point(-1,-1),//锚点
int borderType=BORDER_DEFAULT //用于蕊短外部像素的边界形式
)
12、GaussianBlur函数
高斯滤波
void GaussianBlur(InputArray src,//输入图像
OutputArray dst,//输出图像
Size ksize, //内核大小
double sigmaX,//x方向的方差
double sigmaY=0,//y方向的方差
int borderType=BORDER_DEFAULT//边界的处理方式
)
13、medianBlur函数
中值滤波是一种基于排序的能有效抑制噪声的非线性信号处理技术,基本原理是把数字图像或者数字序列中的一点的值用该点的一个邻域中各点值的中值代替,让周围的像素接近真实值,从而消除孤立的噪声点。
void medianBlur(InputArray src,//输入图像
OutputArray dst, //输出图像
int ksize//滤波核大小
)
14、convexHull函数
void convexHull(InputArray points,//得到的点集,一般是用图像轮廓得到的轮廓点
OutputArray hull,//输出,用于输出凸包
bool clockwise=false,//操作方向
bool returnPoints =true//操作标识符
)
常常以下面的形式出现
vector<vector<Point> >hull( contours.size());
for( int i = 0; i < contours.size(); i++ ){
convexHull(Mat(contours[i]),hull[i],false);}
15、equalizeHist函数
直方图均衡化,提高图像的质量
直方图均衡化通过拉伸像素强度分布范围来增强图像对比度的一种方法
void equalizeHist(InputArray src,//输入图像
OutputArray dst)//输出图像
16、split函数
将一个彩色图像的通道分离
void split(const Mat& src,//输入图像
Mat *mvBegin)//数组
void split(InputArray m, //输入图像
OutputArrayOfArrays mv)//vector向量
17、calcHist函数
void calcHist(const Mat* images,//输入图像
int nimages, //输入图像的个数
const int* channels,//需要统计直方图的第几通道
InputArray mask, //掩膜
OutputArray hist, //输出的直方图数组
int dims,//需要统计的直方图的通道数
const int* histSize,//直方图分成多少个区间,bin的个数
const float** ranges, //统计像素值的区间
bool uniform=true,//是否对得到的直方图数组进行归一化处理
bool accumulate=false//是否累计计算像素值的个数
)
示例:
calcHist(&bgr_planes[0],//输入的图像
1,//输入图像的个数
0,//第几通道
Mat(),//掩膜
b_hist,//输出的直方图数组
1,//需要统计的直方图的通道数
&histSize,//直方图分成多少个区间
&histRanges,//统计像素值的区间
true,//归一化
false);//不累计
18、floodfill函数
漫水填充
自动的选中与种子相连的区域,然后将该区域替换成指定的颜色
都必须在图像中选择一个种子点,然后把临近区域所有相似点填充上同样的颜色。
int floodFill(InputArray image,//输入图像
Point seedPoint, //漫水填充算法的起始点
Scalar newVal, //像素被染色的值
Rect* rect=0,//
Scalar ioDiff=Scalar(),
Scalar upDiff=Scalar(),
int flags=4)//操作标识符
int floodFill(InputArray image,
InputArray mask,//掩膜
Point seedPoint,
Scalar newVal,
Rect* rect=0,
Scalar ioDiff=Scalar(),
Scalar upDiff=Scalar(),
int flags=4)
漫水填充算法不会填充mask非零像素的区域
19、boundingRect函数
Rect boundingRect(InputArray points)//输入包含点的容器vector或者Mat
20、minAreaRect函数
RotatedRect minAreaRect(InputArray points)//输入包含点的vector或者Mat
21、HoughLines函数
霍夫变换主要实现直线检测以及圆检测
void HoughLines(InputArray image, //输入图像
OutputArray lines,//存储了霍夫变换检测到的线条的输出矢量
double rho,
double theta,
int threshold,
double srn=0,
double stn=0 )
22、getRotationMatrix2D函数
Mat getRotationMatrix2D(Point2f center,//旋转中心
double angle,//旋转角度
double scale);//缩放因子
23、getAffineTransform函数
得到仿射变换的的变换矩阵
Mat getAffineTransform(InputArray src,//输入三个点
InputArray dst)//变换后的三个点
24、warpAffine函数
void warpAffine(InputArray src,
OutputArray dst,
InputArray M,//变换矩阵
Size dsize,//输出图像的尺寸
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar& borderValue = Scalar());
25、getPerspectiveTransform函数
得到透视变换的变换矩阵
Mat getPerspectiveTransform(InputArray src,
InputArray dst )
26、warpPerspective函数
void warpPerspective(InputArray src,
OutputArray dst,
InputArray M, //透视变换矩阵
Size dsize,//输出图像的尺寸
int flags = INTER_LINEAR,
int borderMode = BORDER_CONSTANT,
const Scalar& borderValue=Scalar());//透视变换
27、line函数
void line(Mat& img,//要绘制线段的图像
Point pt1,//线段的起点
Point pt2,//线段的重点
const Scalar& color,//颜色
int thickness=1,//宽度
int lineType=8, //线型
int shift=0)//坐标点小数点位数