这里的函数主要总结自浅墨的系列博客,总结仅为了在使用时可以快速检索

具体Demo和教程请访问浅墨的Open_cv系列:访问地址

1、保存图像的数据结构:Mat

Mat myMat= imread("需要导入的图像.jpg"); 

2、图像导入函数:imread

Mat imread(const string& filename, intflags=1 ); 

·第一个参数,const string&类型的filename,填我们需要载入的图片路径名。

在Windows操作系统下,OpenCV的imread函数支持如下类型的图像载入:

Windows位图 - *.bmp, *.dibJPEG文件 - *.jpeg, *.jpg, *.jpeJPEG 2000文件- *.jp2PNG图片 - *.png便携文件格式- *.pbm, *.pgm, *.ppmSun rasters光栅文件 - *.sr, *.rasTIFF 文件 - *.tiff, *.tif

·第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。可以看到它自带缺省值1.

(1)  flag>0, 该函数返回3通道图像,如果磁盘上的图像文件是单通道的灰度图像,则会被强制转为3通道;

(2)  flag=0, 该函数返回单通道图像,如果磁盘的图像文件是多通道的则会被强制转为单通道;

(3)  flag<0, 则函数不对图像进行通道转换

3、创建窗口函数:namedWindow

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE ); 

·第一个参数,const string&型的name,即填被用作窗口的标识符的窗口名称。

·第二个参数,int 类型的flags ,窗口的标识,可以填如下的值:

A)WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)

B)WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。

C)WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

4、指定窗口显示图像函数:imshow

void imshow(const string& winname, InputArray mat);

·第一个参数,const string&类型的winname,填需要显示的窗口标识名称。

·第二个参数,InputArray 类型的mat,填需要显示的图像。

5、输出图像到文件:imwrite函数

bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() ); 

· 第一个参数,const string&类型的filename,填需要写入的文件名就行了,带上后缀,比如,“123.jpg”这样。

·第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。

·第三个参数,const vector<int>&类型的params,表示为特定格式保存的参数编码,它有默认值vector<int>(),所以一般情况下不需要填写。而如果要填写的话,有下面这些需要了解的地方:

6、设定感兴趣区域:ROI(region of interest)

//设定感兴趣区域案例
//定义一个Mat类型并给其设定ROI区域
Mat imageROI;
//方法一
imageROI=image(Rect(500,250,logo.cols,logo.rows));
//方法二
imageROI=srcImage3(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));

7、图像线性混合函数:addWeighted

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

·第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。

·第二个参数,alpha,表示第一个数组的权重

·第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。

·第四个参数,beta,表示第二个数组的权重值。

·第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。

·第六个参数,gamma,一个加到权重总和上的标量值。看下面的式子自然会理解。

·第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。

8、通道分离函数:split:

void split(InputArray m,OutputArrayOfArrays mv);

· 第一个参数,InputArray类型的m或者const Mat&类型的src,填我们需要进行分离的多通道数组。

· 第二个参数,OutputArrayOfArrays类型的mv,填函数的输出数组或者输出的vector容器。

9、通道合并函数 :merge:

void merge(InputArrayOfArrays mv,OutputArray dst) 

· 第一个参数,mv,填需要被合并的输入矩阵或vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度。

· 第二个参数,count,当mv为一个空白的C数组时,代表输入矩阵的个数,这个参数显然必须大于1.

· 第三个参数,dst,即输出矩阵,和mv[0]拥有一样的尺寸和深度,并且通道的数量是矩阵阵列中的通道的总数。

10、分离色彩通道写法:

vector<Mat> channels;
Mat imageBlueChannel;    //定义蓝色通道容器
Mat imageGreenChannel;    //定义绿色通道容器
Mat imageRedChannel;     //定义红色通道容器
srcImage4= imread("需要分离色彩通道的图片.jpg");
// 把一个3通道图像转换成3个单通道图像
split(srcImage4,channels);//分离色彩通道
imageBlueChannel = channels.at(0);
imageGreenChannel = channels.at(1);
imageRedChannel = channels.at(2); 

根据OpenCV的BGR色彩空间(bule,Green,Red,蓝绿红),其中channels.at(0)就表示引用取出channels中的蓝色分量,channels.at(1)就表示引用取出channels中的绿色色分量,channels.at(2)就表示引用取出channels中的红色分量。

11、创建轨迹条函数:createTrackbar

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

· 第一个参数,const string&类型的trackbarname,表示轨迹条的名字,用来代表我们创建的轨迹条。

· 第二个参数,const string&类型的winname,填窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的某一个窗口名。

· 第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是该变量当前的值。

· 第四个参数,int类型的count,表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。

· 第五个参数,TrackbarCallback类型的onChange,首先注意他有默认值0。这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(看下面的第六个参数)。如果回调是NULL指针,表示没有回调函数的调用,仅第三个参数value有变化。

· 第六个参数,void*类型的userdata,他也有默认值0。这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数。

12、轨迹条回调函数:getTrackbarPos

int getTrackbarPos(conststring& trackbarname, conststring& winname);

· 第一个参数,const string&类型的trackbarname,表示轨迹条的名字。

· 第二个参数,const string&类型的winname,表示轨迹条的父窗口的名称。

13、访问图像中的每一个像素点:

//三个for循环,执行运算 new_image(i,j) =a*image(i,j) + b
for(int y = 0; y < image.rows; y++ )
{  for(int x = 0; x < image.cols; x++ )  {  for(int c = 0; c < 3; c++ )  {  new_image.at<Vec3b>(y,x)[c]= saturate_cast<uchar>( (g_nContrastValue*0.01)*(image.at<Vec3b>(y,x)[c] ) + g_nBrightValue );  }  }
}  

让我们分三个方面进行讲解:
·为了访问图像的每一个像素,我们使用这样的语法: image.at<Vec3b>(y,x)[c] 
·其中,y是像素所在的行, x是像素所在的列, c是R、G、B(对应0、1、2)其中之一。
·因为我们的运算结果可能超出像素取值范围(溢出),还可能是非整数(如果是浮点数的话),所以我们要用saturate_cast对结果进行转换,以确保它为有效值。
·这里的a也就是对比度,一般为了观察的效果,取值为0.0到3.0的浮点值,但是我们的轨迹条一般取值都会整数,所以在这里我们可以,将其代表对比度值的nContrastValue参数设为0到300之间的整型,在最后的式子中乘以一个0.01,这样就可以完成轨迹条中300个不同取值的变化。所以在式子中,我们会看到saturate_cast<uchar>( (g_nContrastValue*0.01)*(image.at<Vec3b>(y,x)[c] ) + g_nBrightValue )中的g_nContrastValue*0.01。

14、方框滤波函数:box Filter

void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )

· 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。

· 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。

· 第三个参数,int类型的ddepth,输出图像的深度,-1代表使用原图深度,即src.depth()。

· 第四个参数,Size类型(对Size类型稍后有讲解)的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小

· 第五个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。

· 第六个参数,bool类型的normalize,默认值为true,一个标识符,表示内核是否被其区域归一化(normalized)了。

· 第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。

//示例代码
//载入原图
Mat image=imread("2.jpg");
//进行均值滤波操作
Mat out;
boxFilter(image, out, -1,Size(5, 5)); 

15、均值滤波函数:blur

void blur(InputArray src, OutputArraydst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT ) 

· 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。

· 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。

· 第三个参数,Size类型(对Size类型稍后有讲解)的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小

· 第四个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。

· 第五个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。

//示例代码
//载入原图  Mat image=imread("1.jpg");  //进行均值滤波操作  Mat out;  blur(image, out, Size(7, 7));  

16、高斯滤波函数:GaussianBlur

void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, intborderType=BORDER_DEFAULT )

· 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。

· 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。

· 第三个参数,Size类型的ksize高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数。或者,它们可以是零的,它们都是由sigma计算而来。

· 第四个参数,double类型的sigmaX,表示高斯核函数在X方向的的标准偏差。

· 第五个参数,double类型的sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。

· 为了结果的正确性着想,最好是把第三个参数Size,第四个参数sigmaX和第五个参数sigmaY全部指定到。

· 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。

//示例代码
//载入原图
Mat image=imread("1.jpg");
//进行滤波操作
Mat out;
GaussianBlur( image, out, Size( 5, 5 ), 0, 0 ); 

17、中值滤波函数:medianBlur

void medianBlur(InputArray src,OutputArray dst, int ksize) 

· 第一个参数,InputArray类型的src,函数的输入参数,填1、3或者4通道的Mat类型的图像;当ksize为3或者5的时候,图像深度需为CV_8U,CV_16U,或CV_32F其中之一,而对于较大孔径尺寸的图片,它只能是CV_8U。

· 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。我们可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。

· 第三个参数,int类型的ksize,孔径的线性尺寸(aperture linear size),注意这个参数必须是大于1的奇数,比如:3,5,7,9 ...

//示例代码
//载入原图
Mat image=imread("1.jpg");
//进行中值滤波操作
Mat out;
medianBlur( image, out, 7); 

18、双边滤波函数:bilateralFilter

void bilateralFilter(InputArray src, OutputArraydst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)  

· 第一个参数,InputArray类型的src,输入图像,即源图像,需要为8位或者浮点型单通道、三通道的图像。

· 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。

· 第三个参数,int类型的d,表示在过滤过程中每个像素邻域的直径。如果这个值我们设其为非正数,那么OpenCV会从第五个参数sigmaSpace来计算出它来。

· 第四个参数,double类型的sigmaColor,颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。

· 第五个参数,double类型的sigmaSpace坐标空间中滤波器的sigma值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d>0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。

· 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。

//示例代码
//载入原图
Mat image=imread("1.jpg");
//进行双边滤波操作
Mat out;
bilateralFilter( image, out, 25, 25*2, 25/2 );  

19、形态学膨胀函数:dilate

void dilate(  InputArray src,  OutputArray dst,  InputArray kernel,  Point anchor=Point(-1,-1),  int iterations=1,  int borderType=BORDER_CONSTANT,  const Scalar& borderValue=morphologyDefaultBorderValue()
);  

· 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像通道的数量可以是任意的,但图像深度应为CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F其中之一。

· 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。

· 第三个参数,InputArray类型的kernel,膨胀操作的核。若为NULL时,表示的是使用参考点位于中心3x3的核。

我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。

其中,getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一:

· 矩形: MORPH_RECT

· 交叉形: MORPH_CROSS

· 椭圆形: MORPH_ELLIPSE

而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。

我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心。且需要注意,十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响了形态学运算结果的偏移。

//示例代码(膨胀)       //载入原图   Mat image = imread("1.jpg");
//获取自定义核  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));  Mat out;  //进行膨胀操作  dilate(image, out, element);  
//示例代码(getStructuringElement)int g_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸
//获取自定义核
Mat element = getStructuringElement(MORPH_RECT,  Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1),
Point( g_nStructElementSize, g_nStructElementSize )); 

20、形态学腐蚀函数:erode

void erode(  InputArray src,  OutputArray dst,  InputArray kernel,  Point anchor=Point(-1,-1),  int iterations=1,  int borderType=BORDER_CONSTANT,  const Scalar& borderValue=morphologyDefaultBorderValue()  );  

· 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像通道的数量可以是任意的,但图像深度应为CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F其中之一。

· 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。

· 第三个参数,InputArray类型的kernel,腐蚀操作的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。(具体看上文中浅出部分dilate函数的第三个参数讲解部分)

· 第四个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于单位(element)的中心,我们一般不用管它。

· 第五个参数,int类型的iterations,迭代使用erode()函数的次数,默认值为1。

· 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。

· 第七个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般我们不用去管他。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释。

//示例代码
//载入原图   Mat image = imread("1.jpg");
//获取自定义核  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));  Mat out;
//进行腐蚀操作  erode(image,out, element);  

21、morphologyEx函数详解(开运算、闭运算、顶帽、黑帽、形态学梯度)

void morphologyEx(
InputArray src,
OutputArray dst,
int op,
InputArraykernel,
Pointanchor=Point(-1,-1),
intiterations=1,
intborderType=BORDER_CONSTANT,
constScalar& borderValue=morphologyDefaultBorderValue() );  

· 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下五种之一:CV_8U, CV_16U,CV_16S, CV_32F 或CV_64F。

· 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。

· 第三个参数,int类型的op,表示形态学运算的类型,可以是如下之一的标识符:

·

· MORPH_OPEN – 开运算(Opening operation)

· MORPH_CLOSE – 闭运算(Closing operation)

· MORPH_GRADIENT -形态学梯度(Morphological gradient)

· MORPH_TOPHAT - “顶帽”(“Top hat”)

· MORPH_BLACKHAT - “黑帽”(“Black hat“)

另有CV版本的标识符也可选择,如CV_MOP_CLOSE,CV_MOP_GRADIENT,CV_MOP_TOPHAT,CV_MOP_BLACKHAT,这应该是OpenCV1.0系列版本遗留下来的标识符,和上面的“MORPH_OPEN”一样的效果。

· 第四个参数,InputArray类型的kernel,形态学运算的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。关于getStructuringElement我们上篇文章中讲过了,这里为了大家参阅方便,再写一遍:

其中,getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一:

·

· 矩形: MORPH_RECT

· 交叉形: MORPH_CROSS

· 椭圆形: MORPH_ELLIPSE

而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。

我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心。且需要注意,十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响了形态学运算结果的偏移。

· 第五个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。

· 第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1。

· 第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_ CONSTANT。

·第八个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般我们不用去管他。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释。

//getStructuringElement函数相关的调用示例代码
int g_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸  //获取自定义核
Mat element =getStructuringElement(MORPH_RECT,  Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1),  Point(g_nStructElementSize, g_nStructElementSize )); //形态学处理示例代码(以开运算为例)
//载入原始图    Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图  //创建窗口    namedWindow("【原始图】开运算");   namedWindow("【效果图】开运算");   //显示原始图   imshow("【原始图】开运算", image);   //定义核  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));   //进行形态学操作  morphologyEx(image,image, MORPH_OPEN, element);  //显示效果图   imshow("【效果图】开运算", image);   waitKey(0);   return 0;   

22、边缘检测函数:Candy算子

void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )

· 第一个参数,InputArray类型的image,输入图像,即源图像,填Mat类的对象即可,且需为单通道8位图像。

· 第二个参数,OutputArray类型的edges,输出的边缘图,需要和源图片有一样的尺寸和类型。

· 第三个参数,double类型的threshold1,第一个滞后性阈值。

· 第四个参数,double类型的threshold2,第二个滞后性阈值。

· 第五个参数,int类型的apertureSize,表示应用Sobel算子的孔径大小,其有默认值3。

· 第六个参数,bool类型的L2gradient,一个计算图像梯度幅值的标识,有默认值false。

//示例代码
//载入原始图   Mat src = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图  Canny(src, src, 3, 9,3 );  imshow("【效果图】Canny边缘检测", src);  

23、边缘检测函数:sobel算子

void Sobel (
InputArray src,//输入图  OutputArray dst,//输出图  int ddepth,//输出图像的深度  int dx,  int dy,  int ksize=3,  double scale=1,  double delta=0,  int borderType=BORDER_DEFAULT );  

· 第一个参数,InputArray 类型的src,为输入图像,填Mat类型即可。

· 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。

· 第三个参数,int类型的ddepth,输出图像的深度,支持如下src.depth()和ddepth的组合:

·

· 若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F

· 若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F

· 若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F

· 若src.depth() = CV_64F, 取ddepth = -1/CV_64F

· 第四个参数,int类型dx,x 方向上的差分阶数。

· 第五个参数,int类型dy,y方向上的差分阶数。

· 第六个参数,int类型ksize,有默认值3,表示Sobel核的大小;必须取1,3,5或7。

· 第七个参数,double类型的scale,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。我们可以在文档中查阅getDerivKernels的相关介绍,来得到这个参数的更多信息。

· 第八个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。

· 第九个参数, int类型的borderType,我们的老朋友了(万年是最后一个参数),边界模式,默认值为BORDER_DEFAULT。这个参数可以在官方文档中borderInterpolate处得到更详细的信息。

//示例代码//【0】创建 grad_x 和 grad_y 矩阵  Mat grad_x, grad_y;  Mat abs_grad_x, abs_grad_y,dst;  //【1】载入原始图    Mat src = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图  //【2】显示原始图   imshow("【原始图】sobel边缘检测", src);   //【3】求 X方向梯度  Sobel( src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT );  convertScaleAbs( grad_x, abs_grad_x );  imshow("【效果图】 X方向Sobel", abs_grad_x);   //【4】求Y方向梯度  Sobel( src, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT );  convertScaleAbs( grad_y, abs_grad_y );  imshow("【效果图】Y方向Sobel", abs_grad_y);   //【5】合并梯度(近似)  addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst );  imshow("【效果图】整体方向Sobel", dst); 

24、边缘检测函数:Laplace算子

void Laplacian(InputArray src,OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, intborderType=BORDER_DEFAULT );  

· 第一个参数,InputArray类型的image,输入图像,即源图像,填Mat类的对象即可,且需为单通道8位图像。

· 第二个参数,OutputArray类型的edges,输出的边缘图,需要和源图片有一样的尺寸和通道数。

· 第三个参数,int类型的ddept,目标图像的深度。

· 第四个参数,int类型的ksize,用于计算二阶导数的滤波器的孔径尺寸,大小必须为正奇数,且有默认值1。

· 第五个参数,double类型的scale,计算拉普拉斯值的时候可选的比例因子,有默认值1。

· 第六个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。

· 第七个参数, int类型的borderType,边界模式,默认值为BORDER_DEFAULT。这个参数可以在官方文档中borderInterpolate()处得到更详细的信息。

//示例代码//【0】变量的定义  Mat src,src_gray,dst, abs_dst;  //【1】载入原始图    src = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图  //【2】显示原始图   imshow("【原始图】图像Laplace变换", src);   //【3】使用高斯滤波消除噪声  GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );  //【4】转换为灰度图  cvtColor( src, src_gray, CV_RGB2GRAY );  //【5】使用Laplace函数  Laplacian( src_gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT );  //【6】计算绝对值,并将结果转换成8位  convertScaleAbs( dst, abs_dst );  //【7】显示效果图  imshow( "【效果图】图像Laplace变换", abs_dst );  

25、边缘检测函数:scharr滤波器

void Scharr(
InputArray src, //源图  OutputArray dst, //目标图  int ddepth,//图像深度  int dx,// x方向上的差分阶数  int dy,//y方向上的差分阶数  double scale=1,//缩放因子  double delta=0,// delta值  intborderType=BORDER_DEFAULT )// 边界模式  

· 第一个参数,InputArray 类型的src,为输入图像,填Mat类型即可。

· 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。

· 第三个参数,int类型的ddepth,输出图像的深度,支持如下src.depth()和ddepth的组合:

· 若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F

· 若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F

· 若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F

· 若src.depth() = CV_64F, 取ddepth = -1/CV_64F

· 第四个参数,int类型dx,x方向上的差分阶数。

· 第五个参数,int类型dy,y方向上的差分阶数。

· 第六个参数,double类型的scale,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。我们可以在文档中查阅getDerivKernels的相关介绍,来得到这个参数的更多信息。

· 第七个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。

· 第八个参数, int类型的borderType,我们的老朋友了(万年是最后一个参数),边界模式,默认值为BORDER_DEFAULT。这个参数可以在官方文档中borderInterpolate处得到更详细的信息。

Open_cv中常用函数的原型及参数解释(一)相关推荐

  1. Py之Numpy:Numpy库中常用函数的简介、应用之详细攻略

    Py之Numpy:Numpy库中常用函数的简介.应用之详细攻略 目录 Numpy库中常用函数的简介.应用 1.X, Y = np.meshgrid(X, Y) 相关文章 Py之Numpy:Numpy库 ...

  2. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  3. 计算机应用常用的30个函数,Excel中常用函数的使用

    ISSN 1009-30" 咖船r Kno别b内e and伯叻肋叻电奠知识'i技术 V01.6,No.30,October20lO,pP.8523-8524E-mail:x8jl@cccc. ...

  4. Python中常用函数

    Python中常用函数 1.range( )函数 函数定义: range(stop) range(start, stop[, step]) 返回值:返回一个递增或递减的数字列表,列表的元素值由三个参数 ...

  5. mysql中常用函数与存储过程的创建

    mysql中常用函数与存储过程的创建 常用函数汇总 数学函数 字符串函数 日期和时间函数 条件判断函数 系统函数 加密函数 其他函数 自定义函数 自定义变量的声明和赋值 基本语法 实例 存储过程 事务 ...

  6. oracle中各种函数,oracle中常用函数大全

    1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...

  7. concat函数_三、P57-61 MySQL中常用函数

    本部分主要讲解MySQL数据库中常用函数的使用. P57 SQL中的函数类型:字符串函数.数值函数.日期和时间函数.流程函数.其他常用函数: P58 第1部分:字符串函数 1.concat函数 con ...

  8. php开发中常用函数总结,PHP开发中常用函数总结

    PHP开发中常用函数总结 发布于 2014-10-31 08:34:03 | 48 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Preproc ...

  9. 帝国cms cj1.php,帝国cms源码中常用函数所在位置

    帝国cms源码中常用函数所在位置 发布时间:2014-03-28 15:00:26   作者:佚名   我要评论 帝国cms常用函数所在位置归总,使用帝国cms的朋友可以收藏下 帝国cms常用函数所在 ...

最新文章

  1. 记录两段经典标定代码
  2. Wordpress 更新时 不输入ftp相关信息的方法
  3. 【转】激活 ActiveX 控件
  4. 经典C语言程序100例之四
  5. [机器翻译]参与 Microsoft 开放源代码软件项目的方式
  6. Long Path CodeForces - 407B(动态规划+思维+公式推导)
  7. 中等数学类杂志投稿信箱
  8. C语言实现TEA系列加解密算法
  9. LeetCode 644. 最大平均子段和 II(二分查找)*
  10. 提升不止一点点,Dubbo 3.0 预览版详细解读
  11. 首次结算和汇总不一致
  12. Tomcat的安装、配置常见问题
  13. Android解包命令:unpackbootimg与打包命令:mkbootimg使用
  14. java 闰年闰月_什么是闰年,闰年和闰月的区别
  15. 手机里面android什么意思,wipe什么意思?安卓手机如何wipe
  16. 云计算能从事哪些岗位 未来职业发展怎么规划
  17. Linux命令:Ps -ef指令和 Kill 指令介绍
  18. Profinet高速协议下,PLC之间如何实现无线以太网通讯?
  19. 【springBoot无法启动,启动类灰色】
  20. V-REP笔记:重力加速度的修改

热门文章

  1. 地图标识符号大全_【好玩微信小游戏大全】虫虫逃亡:烧脑游戏佳作!强烈推荐!...
  2. PC端如何使用ITunes无线连接ios手机
  3. xilinx中pll的使用与仿真步骤
  4. 从首届微商博览会看2015年微商的趋势
  5. 手把手教你安装MINIGUI编程环境 (MINIGUI版本3.2.0)
  6. 牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
  7. 链游时代来临!1周12款游戏与公有区块链MagnaChain签约上链
  8. java caller_JavaScript中callee和caller的区别与用法实例分析
  9. 7. 成功解决:io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
  10. java.lang.IllegalStateException: stream has already been operated upon or closed