opencv2.x常用的函数汇总(不断更新中)

        工欲善其事,必先利其器,对opencv中常用的函数有个大致的了解,在处理需要的图像中就可以快速的写出来,但是好记性不如烂笔头,将一些常用函数汇总,供以后速查用。(文中部分是从其他文章复制过来,给了链接。)opencv中有的函数用C写的有的是用c++写的,一般区别的话前面带cv,如cvNamedWindow与namedWindow,cvShowImage与inshow(前者是C),基本上很多其他图像处理两者都混着用,自己知道就好。


1、图像读入,保存,显示

 Mat srcImage = imread("C:/Users/Administrator/Desktop/1.jpg");//读入图像函数

imshow("原图",srcImage);//显示图像函数

imwrite("图3.jpg",imageRIO);//保存图像函数

Mat imageRIO = srcImage(Rect(50,50,100,000));//感兴趣区域函数

还有个getRectSubPix()函数也是从原图像提取一个感兴趣的矩形区域。

2、图像颜色空间转换

void  cvtColor(InputArray src, OutputArray dst, intcode, int dstCn = 0);

(1)第一个参数:输入图像

(2)第二个参数:输出图像

(3)第三个参数:颜色空间转换的标识符(具体见下表)

(4)第四个参数:目标图像的通道数,若该参数为0,表示目标图像取源图像的通道数。cvtColor()函数可以实现RGB颜色向HSV、HSI等颜色空间转换,也可以转换为灰度图像。
例子:cvtColor(srcImage,dstImage,CV_BGR2GRAY);//图像灰度化

谨记:OpenCV默认的图片通道存储顺序是BGR,而不是RGB。

3.边缘检测

Sobel Laplacian Canny 其中Canny算子只能处理(8位)灰度图,其余两种8位32位都可以 

Mat grad_x,grad_y;

Sobel(imgGray,grad_x,CV_8U,1,0,3,1,1);//X方向上的Sobel算子检测,其中3,1,0都是默认值  Sobel(imgGray,grad_y,CV_8U,0,1,3,1,0);//Y方向上的Sobel算子检测,其中3,1,0都是默认值 addWeighted(grad_x,0.5,grad_y,0.5,0,dstImage);//合并梯度

Laplacian(imgGray,dstImage,CV_8U);

Canny(imgGray,dstImage,50,200,3);//50和200表示第一个滞后性阈值和第二个滞后性阈值,较小者用于边缘连接,较大者控制强边缘的初始段,达阈值opnecv推荐为小阈值的3倍;//3表示应用的Sobel算子的孔径大小 有默认值为3;

4.寻找轮廓

只处理8位 即灰度图像

vector<vector<Point>> contours;

findContours(imgGray,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);

drawContours(dstImage,contours,-1,Scalar(0),3);

imshow("轮廓图",dstImage);

5.阈值化操作 

threshold(srcImage,dstImage,100,255,3);

imshow("固定阈值化图像",dstImage); 38 adaptiveThreshold(imgGray,dstImage,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1);

imshow("自适应阈值化图像",dstImage);

6.放大缩小

resize(srcImage,dstImage,Size(),0.5,0.5);//缩小为一半

resize(srcImage,dstImage,Size(),2,2);//放大2倍

resize(srcImage,dstImage,Size(srcImage.cols*3,srcImage.rows*3));//放大3倍

pyrUp(srcImage,dstImage,Size(srcImage.cols*2,srcImage.rows*2));// 放大2倍 50 pyrDown(srcImage,dstImage,Size(srcImage.cols/2,srcImage.rows/2));// 缩小2倍 51 52

7.漫水填充算法

Rect ccomp;

floodFill(srcImage,Point(50,300),Scalar(155,255,55),&ccomp,Scalar(20,20,20),Scalar(20,20,20));

8.膨胀腐蚀、开闭运算

Mat element = getStructuringElement(MORPH_RECT,Size(15,15));

erode(srcImage,dstImage,element);//腐蚀函数

dilate(srcImage,dstImage,element);//膨胀函数

morphologyEx(g_bgrImage,g_bgrImage, MORPH_CLOSE, element);//闭运算

morphologyEx(g_bgrImage,g_bgrImage, MORPH_OPEN, element);//开运算

9.滤波

boxFilter(srcImage,dstImage,-1,Size(3,3));

imshow("方框滤波图",dstImage); 69 70 blur(srcImage,dstImage,Size(3,3));

imshow("均值滤波图",dstImage);

GaussianBlur(srcImage,dstImage,Size(5,7),1,1); 74 imshow("高斯滤波图",dstImage);

 medianBlur(image,out,7);//中值滤波,7为孔径的线性尺寸

bilateralFilter(src,dst,d,sigmaColor,sigmaSpace);//双边滤波,d表示过滤过程中每个像素邻域的直径,sigmaColor颜色空间滤波器的sigma值,sigmaSpace表示坐标空间中滤波器的sigma值

bilateralFilter(image,out,25,25*2,25/2);

还有个重要的函数 cvSmoth()平滑滤波。

参考文章链接:1.https://blog.csdn.net/routine__007/article/details/80444840

                          2https://www.cnblogs.com/ggYYa/p/5687046.html


    

猜你喜欢

转载自blog.csdn.net/ljsant/article/details/88553011