以下函数都是在命名空间cv里的名称!
文章目录
- 一、addWeighted()
- 二、namewindow()
- 三、createTrackbar()
- 四、LUT()
- 五、split()
- 六、dft()
- 线性滤波
- 七、boxFlter()
- 八、blur()
- 九、GaussianBlur()
- 非线性滤波
- 十、medianBlur()
- 十一、bilateraFilter()
- 图像金字塔
- 十二、resize()
- 十三、pyrUp()
- 十四、pyrDown()
- 十五、Threshold()
- 十六、adaptiveThreshold()
- 十七、Canny()
- 十八、sobel算子
- 十九、Laplacian算子
- 二十、scharr滤波器
- 二十一、remap()
- 二十二、equalizeHist()
- 二十三、findContours()
- 二十四、drawContiurs()
- 二十四、convexHull()
- 图像的矩
- 二十五、moment()
- 二十六、contourArea()
- 二十七、arcLength()
- 分水岭
- 二十八、watershed()
- 图片修补
- 二十九、inpaint()
- 角点检测
- 三十、conerHarris()
一、addWeighted()
void AddWeighted(Mat Image1, double alpha,Mat Image2, double beta,double gamma,Mat Image3);
addWeighted(g_Image1, g_dAlphavalue, g_Image2, g_dBetaValue, 0.0, g_dstImage);
参数1:Image1
第一张图片.
参数2:alpha
第一张图片元素权重
参数3:Image2
第二张图片
参数4:beta
第二张图片元素权重
参数5:gamma
图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。
参数6: Image3
输出图片
二、namewindow()
void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;
namedWindow(WINDOW_NAME, 1);
参数1:新建的窗口的名称。自己随便取。
参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE
。即1。
WINDOW_AUTOSIZE
窗口大小自动适应图片大小,并且不可手动更改。WINDOW_NORMAL
用户可以改变这个窗口大小。即0。WINDOW_OPENGL
窗口创建的时候会支持OpenGL。
三、createTrackbar()
CV_EXPORTS int createTrackbar(const string& trackbarname,
const string& winname,
int* value, int count,
TrackbarCallback onChange = 0,
void* userdata = 0);
createTrackbar(TrackbarName,
WINDOW_NAME,
&g_nAlphaValueSlider,
g_nMaxAlphaValue,
on_Trackbar);
参数1:trackbarname
滑动空间的名称。
参数2:winname
滑动空间用于依附的图像窗口的名称。
参数3:value
初始化阈值。
参数4:count
滑动控件的刻度范围。
参数5:TrackbarCallback
是回调函数。
四、LUT()
图片0-100灰度的像素灰度就变成0,101-200的变成100,201-255的就变成255。
void LUT(InputArray src, InputArray lut, OutputArray dst);
LUT(Image1,lookUpTable,Image2)
参数1:src
表示的是输入图像(可以是单通道也可是3通道)
参数2:lut
表示查找表(查找表也可以是单通道,也可以是3通道,如果输入图像为单通道,那查找表必须为单通道,
若输入图像为3通道,查找表可以为单通道,也可以为3通道,若为单通道则表示对图像3个。)
参数3:dst
表示输出图像。
int divideWith = 10;
uchar table[256];
for (int i = 0;i < 256; i++)
{
table[i] = divideWith * (i/divideWith);
}
Mat lookUpTable(1,256,CV_8U);//建立一个mat型用于查表
uchar *p = lookUpTable.data;
for(int i =0; i<256;i++)
{
p[i] = table[i];
}
//调用函数
LUT(I,lookUpTable,J);
五、split()
void split(const Mat &src, * Mat mvbegin)
split (Image1,channels)
参数1:图片
参数2:存储通道的vector容器。
Mat srcImage = imread("1.jpg");
split(srcImage,channels);
Mat imageBlueChannel1 = channels.at(0);
Mat imageBlueChannel1 = channels.at(1);
Mat imageBlueChannel1 = channels.at(2);
六、dft()
离散傅里叶变换
void dft(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)
参数1:输入矩阵,可以为实数或者虚数。
参数2:函数调用后的运算结构存在这里,其尺寸和类型取决于标识符,也就是第三个参数flags。
参数3:转换的标识符,默认为0,可替换。
参数4:默认为0,一般是想要处理的那一行的值,比如C.rows。
线性滤波
七、boxFlter()
方框滤波
void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1, -1), Boolnormalize=true, int borderType=BORDER_DEFAULT)
boxFilter(image,out,-1,Size(5,5))
参数1:src
是输入图像。Mat类的对象,图片的深度应该是 CV_8U,CV_16U,CV_16S,
CV_32F,CV_64F之一。
参数2:dst
即目标图片,需要和源图像有一样的尺寸和类型。
参数3:ddepth
,输出图像的深度,“-1”代表原图深度。
参数4:ksize
,内核的大小。一般用Size(w,h)的写法来表示内核的大小。
参数5:anchor
,表示锚点(即被平滑的那个点),默认值Point(-1,-1)。
参数6:normalize
,默认值为true,一个标识符,表示内核是否被其区域归一化了。
参数7:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
八、blur()
均值滤波
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Pont(-1,-1),
int borderType=BORDER_DEFAULT)
blur(image, out,Size(7,7))
参数1:src
是输入图像。Mat类的对象,图片的深度应该是 CV_8U,CV_16U,CV_16S,
CV_32F,CV_64F之一。
参数2:dst
即目标图片,需要和源图像有一样的尺寸和类型。
参数3:ksize
,内核的大小。一般用Size(w,h)的写法来表示内核的大小。
参数4:anchor
,表示锚点(即被平滑的那个点),默认值Point(-1,-1)。
参数5:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
九、GaussianBlur()
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, intborderType=BORDER_DEFAULT)
GassianBlur(image,out,Size(3,3),0,0)
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:ksize
,内核大小。
参数4:sigmaX
,高斯核函数在X方向的标准偏差。
参数5:sigmaY
,高斯核函数在Y方向的标准偏差。
参数6:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
非线性滤波
十、medianBlur()
中值滤波
void medianBlur(InputArray src, OutputArray dst, int ksize)
medianBlur(image,out ,7)
参数1:src
,输入图片。
参数2:dst
,输出图片。
参数3:ksize
,孔径的线性尺寸,是大于1的奇数。
十一、bilateraFilter()
双边滤波
void bilateraFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)
bilateralFilter(image,out,25,25*2,25/2)
参数1:src,输入图片。
参数2:dst,输出图片。
参数3:d,过滤过程中每个像素邻域的直径。
参数4:sigmaColor,颜色空间滤波器的sigma值。
参数5:sigmaSpace,坐标空间中滤波器的sigma值,坐标空间的标注方差。数值越大,意味着越远的像素会相互影响。
参数6:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
双边滤波,就是在均值或者说普通加权滤波(如高斯滤波)的基础上,通过距离权和颜色权两种权值对图像进行带权平滑处理,即能够去除噪声,又能进行边缘保护。
而双边滤波的这个特性主要是因为他在平滑滤波时同时考虑了像素间的几何距离和色彩距离。
通俗的讲,对图像进行滤波就是一个加权平均的运算过程,滤波后图像中的每个像素点都是由其原图像中该点临域内多个像素点值的加权平均。不同的滤波器,最根本的差异就是权值不同。
双边滤波具有两个权重,分别与几何距离和色彩距离相关。
图像金字塔
对图像的向下取样:(高斯金字塔,放大)
为获取层级为Gi+1的金字塔图像,采取以下步骤
1、对图像Gi进行高斯内核卷积;
2、将所有偶数行和列去除。
对图像的向上取样:(拉普拉斯金字塔,缩小)
如果想放大图片,则需要通过向上取样的操作:
1、将图像在每个方向上扩大为原来的两倍,新增的行和列用0填充。
2、使用先前同样的内核(乘以4)与放大后的图像卷积,获得“新增像素”的近似值。
十二、resize()
尺寸调整
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)
Mat dstImage = Mat::zeros(512,512,CV_8UC3);//显示指定dst大小
Mat srcImage=read("1.jpg);
resize(srcImage,dstImage,dstImage.size());
Mat dstImage;
Mat srcImage=imread("1.jpg");
resize(srcImage, dstImage, Size(srcImage.cols / 2, srcImage.rows / 2),0,0,3);
//resize(srcImage,dstImage,Size(),0.5,0.5);
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:dsize
,输出图像的大小。如果它等于0,有下式计算
dsize=Size(round(fx*src.cols),round(fy*src.rows))
参数4:fx
,沿水平轴的缩放稀疏,有默认值0,且当其等于0时,由下式计算:
(double)dsize.width/src.cols
参数5:fy
,沿垂直轴的缩放系数,有默认值0,且当其等于0时,由下式计算:
(double)dsize.heigth/src.rows
参数6:interpolation
,用于指定插值方式,默认为INTER_LINEAR(线性插值,若是要缩小图像 用CV_INTER_CUBIC,若是要放大图像,用CV_INTER_LINEAR)。
十三、pyrUp()
向上采样
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType+BORDER_DEFAULT)
pyrUp(tmpImage,dstImage,Size(tmpImage.cols*2,tmpImage.rows*2))
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:dstsize
,输出图像的大小,有默认值Size(),即默认情况下,有Size(src.cols2,src.rows2)来计算
参数4:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
十四、pyrDown()
向下采样
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType+BORDER_DEFAULT)
pyrDown(tmpImage,dstImage,Size(tmpImage.cols/2,tmpImage.rows/2))
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:dstsize
,输出图像的大小,有默认值Size(),即默认情况下,有Size((src.cols+1)/2,(src.rows+1)/2)来计算
参数4:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
十五、Threshold()
固定阈值
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
参数1:src
,输入图片。
参数2:dst
,输出图片。
参数3:thresh
,阈值的具体值。
参数4:maxval
,满足要求时想填充的阈值。
参数5:type
,阈值类型。
十六、adaptiveThreshold()
自适应阈值
void adaptiveThreshold(InputArray src, OutputArrar dst, double maxValue, int adaptiveMethod, int threshold, int blockSize, double C)
参数1:src
,输入图片。
参数2:dst
,输出图片。
参数3:maxValue
,给像素赋的满足条件的非零值。
参数4:adaptiveMethod
,用于指定要使用的自适应阈值算法。
参数5:thresholdType
,阈值类型。必须为THRESH_BINARY、THRESH_BINARY_INV中的一个。
参数6:blockSize
,用于计算阈值大小的一个像素的邻域尺寸,为3,5,7。
参数7:C
,减去平均或加权平均值的常数值。通常是正数。
十七、Canny()
边缘检测
void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false)
Canny (src,edges, 3,9,3)
参数1:src
,输入图像。
参数2:edges
,输出的边缘图。
参数3:threshold1
,第一个滞后性阈值。
参数4:threshold2
,第二个滞后性阈值。
参数5,apertureSize
,应用Sobel算子的孔径大小,默认是3。
参数6:L2gradient
,计算图像梯度幅值的标识,有默认值为false。
十八、sobel算子
边缘检测的离散微分算子
void Sobel(InputArray src, OutputArray dst, int ddepth, int sx, int dy, int ksize=3, double scale =1, double delta = 0, int borderType=BORDER_DEFAULT);
Sobel(src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT);
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:ddepth
,输出图像的深度。
参数4:dx
,x方向上的差分阶数。
参数5:dy
,y方向上的差分阶数。
参数6:ksize
,默认值3,Sobel核大小。
参数7:scale
,计算导数值时可选的缩放因子,默认是1,即没有应用缩放。
参数8:delta
,表示在结果存入目标图之前可选的delta值,默认值0。
参数9:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
十九、Laplacian算子
Laplacian算子是n维欧几里得空间中的一个二姐微分算子,定义为梯度grad的三度div。
让一幅图减去它的拉普拉斯算子可以增强对比度。
void Laplacian(InputArray src, OutputArray dst, int ddpth, int ksize=1,double scale=1, double delta=0);
Laplacian(src, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:ddepth
,输出图像的深度。
参数4:ksize
,用于甲酸二阶导数滤波器的孔径尺寸,大小必须为正奇数。
参数5:scale
,计算拉普拉斯值的时候可选的比例因子,默认为1。
参数6:delta
,表示在结果存入目标图之前可选的delta值,默认值0。
参数7:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
二十、scharr滤波器
配合Sobel算子
void Scharr(InputArray src, OutputArray dst, int ddepth, int dx, int dy, double scale=1, double delta=0, int borderType=BORDER_DEFAULT);
Scharr(src, grad_x,CV_16S,0,1,1,0,BORDER_DEFAULT)
参数1:src,输入图像。
参数2:dst,输出图像。
参数3:ddepth
,输出图像的深度。
参数4:dx
,x方向上的差分阶数。
参数5:dy
,y方向上的差分阶数。
参数6:scale
,计算导数值时可选的缩放因子,默认是1,即没有应用缩放。
参数7:delta
,表示在结果存入目标图之前可选的delta值,默认值0。
参数8:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
二十一、remap()
重映射
void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode=BORDER_CONSTANT, const Scalar & borderValue=Scalar())
参数1:src
,输入图像。
参数2:dst
,输出图像。
参数3:map1
,有两种的可能表示对象
- 表示点(x,y)的第一个映射。
- 表示CV_16SC2、CV_32FC1、CV_32FC2类型的X值
参数4:map2
,有两种的可能表示对象
- 若map1表示点(x,y)时,这个参数不代表任何值。
- 表示CV_16UC1,CV_32FC1类型的Y值。
参数5:interpolation
,插值方式。
参数6:borderType
,用于推断图像外部像素的某种边界模式,默认为BORDER_DEFAULT。
参数7:borderValue
,默认值0。
二十二、equalizeHist()
直方图均衡化
void equalizeHist(inputArray src, OutputArray dst)
参数1:src
,输入图像。
参数2:dst
,输出图像。
由equalizeHist()函数实现的灰度直方图均衡化算法,就死吧直方图的每个灰度级进行归一化处理,求每种灰度图的累计分布,得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。
二十三、findContours()
寻找轮廓
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int method, Point offset=Point())
findContours(image,contours,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE)
参数1:image
,输入图像。8位单通道图。
参数2:contours
,存储结果。每个轮廓存储为一个点向量,即用point类型的vector来表示。
参数3:hierachy
,可选的输出向量,包含图像的拓扑信息。
参数4:mode
,轮廓检索模式。
参数5:method
,轮廓近似办法。
参数6:offset
,每个轮廓点的可选偏移量,有默认值Point()。
二十四、drawContiurs()
绘制轮廓
void drawContours(InputArray image, InputArrayOfArrays contours, int ContourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArrayhierarchy=noArray(), int maxLecel+INT_MAX,Point offset=Point())
drawContours(result,contours,-1,Scalar(0),3)
参数1:image
,输入图片。
参数2:contours
,所有的输入轮廓。用point的vextor表示。
参数3:contoursIdx
,轮廓绘制的指示变量。如果是负值,则绘制所有轮廓。
参数4:color
,轮廓的颜色。
参数5:thickness
,轮廓线条的粗细度,默认为1。
参数6:lineType
,线条的类型,有默认值8。
参数7:hierarchy
,可选的层次结构信息,有默认值noArray()。
参数8:maxLevel
,表示用于绘制轮廓的最大等级,有默认值INT_MAX。
参数9:offset
,可选的轮廓偏移参数,有默认值Point()。
二十四、convexHull()
寻找凸包
viod convexHull(InputArray points, OutputArray hull, bool clockwise=false, bool returnPoints-true)
参数1:points
,输入的二维点集。
参数2:hull
,输出参数,函数调用后找到的凸包。
参数3:clockwise
,操作方向标识符。为真则逆时针。
参数4:returnPoints
,操作标志符,默认为true。为真是返回凸包的各个点。否则返回各个点的指数。
图像的矩
二十五、moment()
矩的计算
Moments moments(InputArray array, bool binaryImage=false)
参数1:array
,输入图像。
参数2:binaryImage
,有默认值false。若为true,则所有非零像素都是1。
二十六、contourArea()
double contourArea(InputArray contour, bool oriented=false)
参数1:contour
,输入的向量,二维点,可以是vecror或Mat类型。
参数2:oriented
,面向区域的标识符。若其为true,该函数返回一个带符号的面积值,其正负取决于轮廓的方向。false表示以绝对值返回,不带符号。
二十七、arcLength()
计算轮廓长度
double arcLength(InputArray curve, bool closed)
参数1:curve
,输入的二维点集。
参数2:closed
,用于指示曲线是否封闭的标识符。
分水岭
二十八、watershed()
实现分水岭算法
void watershed(InputArray image, InputOutputArray markers)
参数1:image,输入图像
参数2:makers,输出图像
图片修补
二十九、inpaint()
图片修补
void inpaint(InputArray src, InputArray inpainyMask, OutputArray dst, double inpaintRadius, int flags)
参数1:src
,输入图像。
参数2:inpaintMask
,修复掩膜。单通道图像,非零像素表示需要修补的图像。
参数3:dst
,输出图像。
参数4:inpaintRadius
,需要修补的每个点的圆形邻域。
参数5:flags
,修补方法的标识符。
角点检测
三十、conerHarris()
harris角点检测
void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType=BORDER_DEFAULT)
参数1:src,输入图像。
参数2:dst,输出图像。
参数3:blockSize,表示邻域的大小。
参数4:ksize,表示Sobel()算子的孔径大小。
参数5:k,Harris参数。
参数6:borderType,图像像素的边界模式。