opencv图像处理的一些常用函数简单使用
2017-08-15 10:16
609 查看
转自:http://www.cnblogs.com/ggYYa/p/5687046.html
及二值区域的简单处理:http://www.cnblogs.com/ggYYa/p/5688139.html
谢谢分享!在这里收藏了~
opencv二值图像处理:
谢谢!
转自:http://www.cnblogs.com/ggYYa/p/5687046.html
及二值区域的简单处理:http://www.cnblogs.com/ggYYa/p/5688139.html
及二值区域的简单处理:http://www.cnblogs.com/ggYYa/p/5688139.html
谢谢分享!在这里收藏了~
``` //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总; Mat srcImage = imread("C:/Users/Administrator/Desktop/车牌识别/车牌图像库/1.jpg");//读入图像函数 imshow("原图",srcImage);//显示图像函数 imwrite("图3.jpg",imageRIO);//保存图像函数 Mat imageRIO = srcImage(Rect(50,50,100,000));//感兴趣区域函数 cvtColor(srcImage,dstImage,CV_BGR2GRAY);//图像灰度化 //边缘检测 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; // 寻找轮廓 只处理8位 即灰度图像 vector<vector<Point>> contours; findContours(imgGray,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE); drawContours(dstImage,contours,-1,Scalar(0),3); imshow("轮廓图",dstImage); //阈值化操作 threshold(srcImage,dstImage,100,255,3); imshow("固定阈值化图像",dstImage); adaptiveThreshold(imgGray,dstImage,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1); imshow("自适应阈值化图像",dstImage); // resize函数实现 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倍 pyrDown(srcImage,dstImage,Size(srcImage.cols/2,srcImage.rows/2));// 缩小2倍 //漫水填充算法 Rect ccomp; floodFill(srcImage,Point(50,300),Scalar(155,255,55),&ccomp,Scalar(20,20,20),Scalar(20,20,20)); //膨胀腐蚀 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);//开运算 //滤波 boxFilter(srcImage,dstImage,-1,Size(3,3)); imshow("方框滤波图",dstImage); blur(srcImage,dstImage,Size(3,3)); imshow("均值滤波图",dstImage); GaussianBlur(srcImage,dstImage,Size(5,7),1,1); 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);
opencv二值图像处理:
//--------------------------------------【程序说明】------------------------------------------- // 在图像处理中总会遇到二值图像,故对二值图像中区域处理在所难免; // 提取自己想要的区域部分对其处理; // 此函数简单实现高亮度区域处理; //------------------------------------------------------------------------------------------------ //---------------------------------【头文件、命名空间包含部分】---------------------------- // 描述:包含程序所使用的头文件和命名空间 //------------------------------------------------------------------------------------------------- #include <opencv2/opencv.hpp>//头文件 using namespace cv;//包含cv命名空间 using namespace std; //-----------------------------------【全局变量声明部分】-------------------------------------- // 描述:全局变量的声明 //----------------------------------------------------------------------------------------------- Mat g_srcImage; Mat g_grayImage; Mat g_dstImage; int g_nThresh_max = 255; vector <vector<Point>> g_vContours; //-----------------------------------【main( )函数】-------------------------------------------- int main() { // 读入待处理原始图像 g_srcImage = imread("C:/Users/Administrator/Desktop/2.jpg"); if(!g_srcImage.data ) { printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false; } imshow("原始图",g_srcImage); //-------------------------------------------------------------------------------------------------- //--------------------------根据高亮度特征-------------------------------------------- cvtColor(g_srcImage,g_grayImage,CV_BGR2GRAY); imshow("灰度图",g_grayImage); //adaptiveThreshold(g_grayImage,g_grayImage,g_nThresh_max,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,0);//自动阈值 //threshold(g_grayImage,g_grayImage,100,255,THRESH_BINARY); threshold(g_grayImage,g_grayImage,0,g_nThresh_max,CV_THRESH_OTSU); imshow("高亮度图像",g_grayImage); //waitKey(0); //----------------------------------------------------------------------------------------------------------- // 进行闭运算操作 Mat element = getStructuringElement(MORPH_RECT, Size(4, 4)); morphologyEx(g_grayImage,g_dstImage, MORPH_CLOSE, element); // 查找需要填充区域的轮廓 vector <Vec4i> hierarchy; findContours(g_dstImage,g_vContours,hierarchy,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); // 将轮廓内填充 if( !g_vContours.empty() & !hierarchy.empty() ) { for (int idx=0;idx < g_vContours.size();idx++) { drawContours(g_dstImage,g_vContours,idx,Scalar::all(255),CV_FILLED,8);//填充轮廓内部 } } //------------------------------------------------------------------------------------------------ //-----------------------------取面积最大的一块---------------------------------------- double maxArea = 0; vector <Point> maxContour; findContours(g_dstImage,g_vContours,hierarchy,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); if( !g_vContours.empty() && !hierarchy.empty() ) { for (int idx=0;idx < g_vContours.size();idx++) { double contArea = contourArea(g_vContours[idx]);//当前区域的面积 // 求最大面积的区域 if( contArea>maxArea ) { maxArea = contArea; maxContour = g_vContours[idx]; } } } // 将轮廓转为矩形框 Rect maxRect = boundingRect(maxContour); // 显示连通域 Mat result1, result2; g_dstImage.copyTo(result1); g_dstImage.copyTo(result2); for (size_t i = 0; i < g_vContours.size(); i++) { Rect r = boundingRect(g_vContours[i]); rectangle(result1, r,Scalar(255)); } imshow("all regions", result1) ; rectangle(result2, 8c4a maxRect, Scalar(255)); imshow("largest region", result2) ; waitKey(0); }
谢谢!
转自:http://www.cnblogs.com/ggYYa/p/5687046.html
及二值区域的简单处理:http://www.cnblogs.com/ggYYa/p/5688139.html
相关文章推荐
- opencv 简单、常用的图像处理函数(2)
- opencv 图像简单逻辑操作汇总与一些常用的函数
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- OpenCV 图像处理常用函数(转)
- 图像处理中几个常用函数(Opencv实现)
- 图像处理_常用函数_OpenCV
- ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- 一些OpenCV里常用的图像处理
- matlab 在图像处理中常用的函数使用(2)
- OpenCV图像处理中常用函数汇总(1)
- opencv常用图像处理函数
- 计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数
- [openCV]视频的读入与一些简单的图像处理
- 计算机何中常用的函数及一些精度的简单处理
- opencv常用图像处理函数(C版本)
- OpenCV图像处理和图像识别常用函数
- 图像处理和图像识别中常用的OpenCV函数
- 图像处理之opencv---常用函数
- 【OpenCV】图像处理和图像识别中常用的OpenCV函数汇总