• 千城
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 4
    下载次数
  • 2018-01-26 16:39
    上传日期
opencv初学教程形态学程序代码,滤波,提取边界
数学形态学.rar
  • 新建文本文档 (3).txt
    7.3KB
内容介绍
//--------------------------------------【程序说明】------------------------------------------- // 程序说明:《OpenCV3编程入门》OpenCV3版书本配套示例程序48 // 程序描述:形态学图像处理——开运算、闭运算、形态学梯度、顶帽、黑帽 // 开发测试所用操作系统: Windows 7 64bit // 开发测试所用IDE版本:Visual Studio 2010 // 开发测试所用OpenCV版本: 3.0 beta // 2014年11月 Created by @浅墨_毛星云 // 2014年12月 Revised by @浅墨_毛星云 //------------------------------------------------------------------------------------------------ //---------------------------------【头文件、命名空间包含部分】---------------------------- // 描述:包含程序所使用的头文件和命名空间 //------------------------------------------------------------------------------------------------ #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace std; using namespace cv; //-----------------------------------【全局变量声明部分】----------------------------------- // 描述:全局变量声明 //----------------------------------------------------------------------------------------------- Mat g_srcImage, g_dstImage;//原始图和效果图 int g_nElementShape = MORPH_RECT;//元素结构的形状 //变量接收的TrackBar位置参数 int g_nMaxIterationNum = 10; int g_nOpenCloseNum = 0; int g_nErodeDilateNum = 0; int g_nTopBlackHatNum = 0; //-----------------------------------【全局函数声明部分】-------------------------------------- // 描述:全局函数声明 //----------------------------------------------------------------------------------------------- static void on_OpenClose(int, void*);//回调函数 static void on_ErodeDilate(int, void*);//回调函数 static void on_TopBlackHat(int, void*);//回调函数 static void ShowHelpText(); //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { //改变console字体颜色 system("color 2F"); ShowHelpText(); //载入原图 g_srcImage = imread("1.jpg"); if( !g_srcImage.data ) { printf("Oh,no,读取srcImage错误~! \n"); return false; } //显示原始图 namedWindow("【原始图】"); imshow("【原始图】", g_srcImage); //创建三个窗口 namedWindow("【开运算/闭运算】",1); namedWindow("【腐蚀/膨胀】",1); namedWindow("【顶帽/黑帽】",1); //参数赋值 g_nOpenCloseNum=9; g_nErodeDilateNum=9; g_nTopBlackHatNum=2; //分别为三个窗口创建滚动条 createTrackbar("迭代值", "【开运算/闭运算】",&g_nOpenCloseNum,g_nMaxIterationNum*2+1,on_OpenClose); createTrackbar("迭代值", "【腐蚀/膨胀】",&g_nErodeDilateNum,g_nMaxIterationNum*2+1,on_ErodeDilate); createTrackbar("迭代值", "【顶帽/黑帽】",&g_nTopBlackHatNum,g_nMaxIterationNum*2+1,on_TopBlackHat); //轮询获取按键信息 while(1) { int c; //执行回调函数 on_OpenClose(g_nOpenCloseNum, 0); on_ErodeDilate(g_nErodeDilateNum, 0); on_TopBlackHat(g_nTopBlackHatNum,0); //获取按键 c = waitKey(0); //按下键盘按键Q或者ESC,程序退出 if( (char)c == 'q'||(char)c == 27 ) break; //按下键盘按键1,使用椭圆(Elliptic)结构元素结构元素MORPH_ELLIPSE if( (char)c == 49 )//键盘按键1的ASII码为49 g_nElementShape = MORPH_ELLIPSE; //按下键盘按键2,使用矩形(Rectangle)结构元素MORPH_RECT else if( (char)c == 50 )//键盘按键2的ASII码为50 g_nElementShape = MORPH_RECT; //按下键盘按键3,使用十字形(Cross-shaped)结构元素MORPH_CROSS else if( (char)c == 51 )//键盘按键3的ASII码为51 g_nElementShape = MORPH_CROSS; //按下键盘按键space,在矩形、椭圆、十字形结构元素中循环 else if( (char)c == ' ' ) g_nElementShape = (g_nElementShape + 1) % 3; } return 0; } //-----------------------------------【on_OpenClose( )函数】---------------------------------- // 描述:【开运算/闭运算】窗口的回调函数 //----------------------------------------------------------------------------------------------- static void on_OpenClose(int, void*) { //偏移量的定义 int offset = g_nOpenCloseNum - g_nMaxIterationNum;//偏移量 int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值 //自定义核 Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset*2+1, Absolute_offset*2+1), Point(Absolute_offset, Absolute_offset) ); //进行操作 if( offset < 0 ) //此句代码的OpenCV2版为: //morphologyEx(g_srcImage, g_dstImage, CV_MOP_OPEN, element); //此句代码的OpenCV3版为: morphologyEx(g_srcImage, g_dstImage, MORPH_OPEN, element); else //此句代码的OpenCV2版为: //morphologyEx(g_srcImage, g_dstImage, CV_MOP_CLOSE, element); //此句代码的OpenCV3版为: morphologyEx(g_srcImage, g_dstImage, MORPH_CLOSE, element); //显示图像 imshow("【开运算/闭运算】",g_dstImage); } //-----------------------------------【on_ErodeDilate( )函数】---------------------------------- // 描述:【腐蚀/膨胀】窗口的回调函数 //----------------------------------------------------------------------------------------------- static void on_ErodeDilate(int, void*) { //偏移量的定义 int offset = g_nErodeDilateNum - g_nMaxIterationNum; //偏移量 int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值 //自定义核 Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset*2+1, Absolute_offset*2+1), Point(Absolute_offset, Absolute_offset) ); //进行操作 if( offset < 0 ) erode(g_srcImage, g_dstImage, element); else dilate(g_srcImage, g_dstImage, element); //显示图像 imshow("【腐蚀/膨胀】",g_dstImage); } //-----------------------------------【on_TopBlackHat( )函数】-------------------------------- // 描述:【顶帽运算/黑帽运算】窗口的回调函数 //---------------------------------------------------------------------------------------------- static void on_TopBlackHat(int, void*) { //偏移量的定义 int offset = g_nTopBlackHatNum - g_nMaxIterationNum;//偏移量 int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值 //自定义核 Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset*2+1, Absolute_offset*2+1), Point(Absolute_offset, Absolute_offset) ); //进行操作 if( offset < 0 ) morphologyEx(g_srcImage, g_dstImage, MORPH_TOPHAT , element); else morphologyEx(g_srcImage, g_dstImage, MORPH_BLACKHAT, element); //显示图像 imshow("【顶帽/黑帽】",g_dstImage); } //-----------------------------------【ShowHelpText( )函数】---------------------------------- // 描述:输出一些帮助信息 //---------------------------------------------------------------------------------------------- static void ShowHelpText() { //输出欢迎信息和OpenCV版本 printf("\n\n\t\t\t非常感谢购买《OpenCV3编程入门》一书!\n"); printf("\n\n\t\t\t此为本书OpenCV3版的第48个配套示例程序\n"); printf("\n\n\t\t\t 当前使用的OpenCV版本为:" CV_VERSION ); printf("\n\n ----------------------------------------------------------------------------\n"); //输出一些帮助信息 printf("\n\t请调整滚动条观察图像效果\n\n"); printf( "\n\t按键操作说明: \n\n" "\t\t键盘按键【ESC】或者【Q】- 退出程序\n" "\t\t键盘按键【1】- 使用椭圆(Elliptic)结构元素\n" "\t\t键盘按键【2】- 使用矩形(Rectangle )结构元素\n" "\t\t键盘按键【3】- 使用十字型(Cross-shaped)结构元素\n" "\t\t键盘按键【空格SPACE】- 在矩形、椭圆、十字形结构元素中循环\n" ); }
评论
    相关推荐
    • Opencv中文文档
      这是Opencv中文文档,里面包含pdf和doc格式。opencv教程链接:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html
    • DEMO-opencv火焰检测识别
      主要完成两个视频中火焰的检测,主要结合RGB判据和HIS判据,设定合适的阈值条件,检测出火焰对应像素的区域,将原图二值化,经过中值滤波以及数学形态学的膨胀运算等图像处理,消除一些噪声及离散点,连通一些遗漏的...
    • openCV运动检测
      基于OpenCV的运动目标检测 读取usb摄像头 背景更新 高斯滤波 二值化 形态学滤波
    • [opencv] 017 形态学滤波 膨胀+腐蚀+开闭运算+梯度+顶帽+黑帽
      本代码主要介绍形态学滤波的作用,其中基础滤波方式为:腐蚀与膨胀。后续的开运算、闭运算、形态学梯度、顶帽、黑帽都是结合两者的不同使用方式。
    • qtopencv.zip
      形态学处理主要包括以下七个部分: "①膨胀、腐蚀." "②开、闭运算." "③梯度、顶帽、黑帽运算." "④填充孔洞." "⑤去除小面积区域." "⑥形态学重构." "⑦轮廓的提取及描述." 图像滤波处理主要包括以下五种...
    • 形态学滤波
      基于VISUAL STUDIO 2008和OPENCV实现形态学滤波
    • OpenCV例程
      基于opencv的use摄像头视频采集程序、opencv的两个摄像头数据采集、图像反转、图像格式的转换、角点检测、运动模板检测、如何利用Camshift算法进行彩色目标的跟踪
    • opencv实例
      对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算) 24 用不同的核进行图像的二维滤波 27 图像域的填充 30 寻找轮廓实现视频流的运动目标检测(超推荐一下) 35 采用金字塔方法进行图像分割 40 图像的亮度变换 43 ...
    • codesforimageprocessing.rar
      实现简单图像处理,包括256色转灰度图、Hough变换、Walsh变换、中值滤波、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘检测)、方块编码、梯度锐化、灰度均衡、直方图均衡、离散余弦变换、维纳滤波处理、逆滤波处理、阈值变换、高斯平滑。
    • matlab.rar
      基于MATLAB-GUI图形界面的数字图像处理软件 本系统设计基于GUI图形界面,用matlab语言编写代码,实现功能包括图象的读取、存储、显示、直方图均衡化、阈值化、小波分解、小波重构、加噪、去噪、平滑、锐化、边缘检测、图像分割等