OpenCV学习之旅4——图像处理(1)
2018-01-30 12:53
387 查看
1.三种线性滤波
1.1 方框滤波
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { // 载入原图 Mat image=imread("1.jpg"); //创建窗口 namedWindow( "方框滤波【原图】" ); namedWindow( "方框滤波【效果图】"); //显示原图 imshow( "方框滤波【原图】", image ); //进行方框滤波操作,第三个参数-1指用原图深度,ksize=3*3 Mat out3; boxFilter( image, out3, -1,Size(3, 3)); //显示效果图 imshow( "方框滤波【效果图】" ,out3 ); imwrite("3.jpg",out3); //进行方框滤波操作,第三个参数-1指用原图深度,ksize=5*5 Mat out5; boxFilter(image, out5, -1, Size(5, 5)); //显示效果图 imshow("方框滤波【效果图】", out5); imwrite("5.jpg", out5); //进行方框滤波操作,第三个参数-1指用原图深度,ksize=7*7 Mat out7; boxFilter(image, out7, -1, Size(7, 7)); //显示效果图 imshow("方框滤波【效果图】", out7); imwrite("7.jpg", out7); waitKey( 0 ); }
1.1.1 boxFilter()
void boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor=Point(-1,-1),bool normalize=true,int borderType=BORDER_DEFAULT );
第三个参数:图像深度,图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率,取-1表示用原图深度。
第四个参数:Size(width,height)类内核大小,参数一般取奇数。
1.2 均值滤波
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { //【1】载入原始图 Mat srcImage=imread("1.jpg"); //【2】显示原始图 imshow( "均值滤波【原图】", srcImage ); //【3】进行均值滤波操作 Mat dstImage3; blur( srcImage, dstImage3, Size(3, 3)); //【4】显示效果图 imshow( "均值滤波【效果图3】" ,dstImage3 ); //【3】进行均值滤波操作 Mat dstImage5; blur(srcImage, dstImage5, Size(5, 5)); //【4】显示效果图 imshow("均值滤波【效果图5】", dstImage5); //【3】进行均值滤波操作 Mat dstImage7; blur(srcImage, dstImage7, Size(7, 7)); //【4】显示效果图 imshow("均值滤波【效果图7】", dstImage7); waitKey( 0 ); }
1.3高斯滤波
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { // 载入原图 Mat image=imread("1.jpg"); //创建窗口 // namedWindow( "高斯滤波【原图】" ); // namedWindow( "高斯滤波【效果图】"); //显示原图 imshow( "高斯滤波【原图】", image ); //进行高斯滤波操作 Mat out3; GaussianBlur( image, out3, Size( 3, 3 ), 0, 0 ); //显示效果图 imshow( "高斯滤波【效果图3】" ,out3 ); //进行高斯滤波操作 Mat out5; GaussianBlur(image, out5, Size(5, 5), 0, 0); //显示效果图 imshow("高斯滤波【效果图5】", out5); //进行高斯滤波操作 Mat out7; GaussianBlur(image, out7, Size(7, 7), 0, 0); //显示效果图 imshow("高斯滤波【效果图7】", out7); //进行高斯滤波操作 Mat out9; GaussianBlur( image, out9, Size( 9, 9 ), 0, 0 ); //显示效果图 imshow( "高斯滤波【效果图9】" ,out9 ); //进行高斯滤波操作 Mat out11; GaussianBlur(image, out11, Size(11, 11), 2, 2); //显示效果图 imshow("高斯滤波【效果图11】", out11); waitKey( 0 ); }
1.4 线性滤波综合示例
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace std; using namespace cv; //-----------------------------------【全局变量声明部分】-------------------------------------- // 描述:全局变量声明 //----------------------------------------------------------------------------------------------- Mat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3;//存储图片的Mat类型 int g_nBoxFilterValue=3; //方框滤波参数值 int g_nMeanBlurValue=3; //均值滤波参数值 int g_nGaussianBlurValue=3; //高斯滤波参数值 //-----------------------------------【全局函数声明部分】-------------------------------------- // 描述:全局函数声明 //----------------------------------------------------------------------------------------------- //四个轨迹条的回调函数 static void on_BoxFilter(int, void *); //均值滤波 static void on_MeanBlur(int, void *); //均值滤波 static void on_GaussianBlur(int, void *); //高斯滤波 //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { Mat a; //改变console字体颜色 system("color 5F"); // 载入原图 g_srcImage = imread( "1.jpg", 1 ); if( !g_srcImage.data ) { printf("Oh,no,读取srcImage错误~! \n"); return false; } //克隆原图到三个Mat类型中 g_dstImage1 = g_srcImage.clone( ); g_dstImage2 = g_srcImage.clone( ); g_dstImage3 = g_srcImage.clone( ); //显示原图 namedWindow("【<0>原图窗口】", 1); imshow("【<0>原图窗口】",g_srcImage); //=================【<1>方框滤波】================== //创建窗口 namedWindow("【<1>方框滤波】", 1); //创建轨迹条 createTrackbar("内核值:", "【<1>方框滤波】",&g_nBoxFilterValue, 40,on_BoxFilter ); on_MeanBlur(g_nBoxFilterValue,0); imshow("【<1>方框滤波】", g_dstImage1); //================================================ //=================【<2>均值滤波】================== //创建窗口 namedWindow("【<2>均值滤波】", 1); //创建轨迹条 createTrackbar("内核值:", "【<2>均值滤波】",&g_nMeanBlurValue, 40,on_MeanBlur ); on_MeanBlur(g_nMeanBlurValue,0); //================================================ //=================【<3>高斯滤波】===================== //创建窗口 namedWindow("【<3>高斯滤波】", 1); //创建轨迹条 createTrackbar("内核值:", "【<3>高斯滤波】",&g_nGaussianBlurValue, 40,on_GaussianBlur ); on_GaussianBlur(g_nGaussianBlurValue,0); //================================================ //输出一些帮助信息 cout<<endl<<"\t运行成功,请调整滚动条观察图像效果~\n\n" <<"\t按下“q”键时,程序退出。\n"; //按下“q”键时,程序退出 while(char(waitKey(1)) != 'q') {} return 0; } //-----------------------------【on_BoxFilter( )函数】------------------------------------ // 描述:方框滤波操作的回调函数 //----------------------------------------------------------------------------------------------- static void on_BoxFilter(int, void *) { //方框滤波操作 boxFilter( g_srcImage, g_dstImage1, -1,Size( g_nBoxFilterValue+1, g_nBoxFilterValue+1)); //显示窗口 imshow("【<1>方框滤波】", g_dstImage1); } //-----------------------------【on_MeanBlur( )函数】------------------------------------ // 描述:均值滤波操作的回调函数 //----------------------------------------------------------------------------------------------- static void on_MeanBlur(int, void *) { //均值滤波操作 blur( g_srcImage, g_dstImage2, Size( g_nMeanBlurValue+1, g_nMeanBlurValue+1)); //显示窗口 imshow("【<2>均值滤波】", g_dstImage2); } //-----------------------------【ContrastAndBright( )函数】------------------------------------ // 描述:高斯滤波操作的回调函数 //----------------------------------------------------------------------------------------------- static void on_GaussianBlur(int, void *) { //高斯滤波操作 GaussianBlur( g_srcImage, g_dstImage3, Size( g_nGaussianBlurValue*2+1, g_nGaussianBlurValue*2+1 ), 0, 0); //显示窗口 imshow("【<3>高斯滤波】", g_dstImage3); }
相关文章推荐
- 【OpenCV图像处理入门学习教程五】基于背景差分法的视频目标运动侦测
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理
- 学习【OpenCV入门教程之十一】 形态学图像处理(二)开运算,闭运算,梯度运算,顶帽,黑帽---思维导图笔记
- OpenCV学习之图像处理[1]
- OpenCV学习——图像的形态处理学
- OpenCV学习笔记(4)——平滑处理图像
- Opencv学习笔记-----图像阈值化处理
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理
- opencv学习笔记3:图像处理
- OpenCV学习之图像处理
- OpenCV学习笔记12 OpenCV图像处理模块ImgProc Module. Image Processing(五)
- OpenCV学习笔记(八)——图像处理之直方图ImgProc
- OpenCV学习笔记三-用类处理彩色图像
- (转)Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- 【OpenCV图像处理入门学习教程三】基于SIFT特征和SURF特征的微旋转图像拼接与融合生成全景图像的比较
- OpenCV关于视频处理的学习(VideoCapture类)-在检测中一些必要的图像操作
- opencv学习(2)——图像处理的一些常见操作
- OpenCv学习笔记之图像平滑处理
- 有关opencv的学习(14)—使用自适应阈值处理图像
- 计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数