开运算 (Opening)

  • 原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html

  • 开运算是通过先对图像腐蚀再膨胀实现的。

  • 可以排除小团块物体(如果物体较背景明亮)

  • 请看以下。左图是原图像,右图是採用开运算转换之后的结果图。

    观察发现字母拐弯处的白色空间消失。

  • watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

闭运算(Closing)

  • 闭运算是通过先对图像膨胀再腐蚀实现的。

  • 可以排除小型黑洞(黑色区域)。

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaF93bHlmdw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

形态梯度(Morphological Gradient)

  • 膨胀图与腐蚀图之差

  • 可以保留物体的边缘轮廓,例如以下所看到的:

顶帽(Top Hat)

  • 原图像与开运算结果图之差

黑帽(Black Hat)

  • 闭运算结果图与原图像之差

  • 代码:
  • // ConsoleApplication3_6_23.cpp : Defines the entry point for the console application.
    // #include "stdafx.h"
    #include<opencv2/opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv; Mat src,dst; int pro_elem = 0;
    int pro_size = 0;
    int pro_operator = 0; const int max_elem = 2;
    const int max_size = 21;
    const int max_operator = 4; char* windowName = "Demo";
    void Image_pro(int,void*); int _tmain(int argc, _TCHAR* argv[])
    {
    src = imread("hwl.jpg");
    if(!src.data)
    return -1; namedWindow(windowName,CV_WINDOW_AUTOSIZE); createTrackbar("Operator:\n 0:opening-1:closing-2:gradient-3:Top Hat-4: Black Hat",
    windowName,&pro_operator,max_operator,Image_pro); createTrackbar("Element:\n 0:Rect-1:Cross-2:Ellipse",
    windowName,&pro_elem,max_elem,Image_pro); createTrackbar("Kernel size:\n 2n+1",
    windowName,&pro_size,max_size,Image_pro); Image_pro(0,0);
    waitKey(0);
    return 0;
    } void Image_pro(int,void*)
    {
    int operation = pro_operator + 2;
    Mat element = getStructuringElement(pro_elem,Size(2*pro_size+1,2*pro_size+1),
    Point(pro_size,pro_size));
    morphologyEx(src,dst,operation,element);
    imshow(windowName,dst);
    }

版权声明:本文博主原创文章。博客,未经同意,不得转载。

opencv-形态处理的更多相关文章

  1. opencv之形态变换

    形态变换 在opencv之膨胀与腐蚀中介绍了Dilation/Erosion的原理.建议先读这一篇,搞懂原理. 这样就可以很轻松地理解为什么本文的这些形态变换可以取得相应的效果. 基于此,我们可以组合 ...

  2. opencv 抠图联通块(c接口)

    #include "stdio.h" #include "iostream" #include "opencv/cv.h" #include ...

  3. [OpenCV] IplImage and Functions

    In this chapter, APIs will make U crazy. Good luck! Next, Review Linear Algebra.  Ref: http://blog.c ...

  4. OpenCV 2 Computer Vision Application Programming Cookbook读书笔记

    ### `highgui`的常用函数: `cv::namedWindow`:一个命名窗口 `cv::imshow`:在指定窗口显示图像 `cv::waitKey`:等待按键 ### 像素级 * 在灰度 ...

  5. 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  6. OpenCV——Delaunay三角 [转载]

    从这个博客转载 http://blog.csdn.net/raby_gyl/article/details/17409717 请其它同学转载时注明原始文章的出处! Delaunay三角剖分是1934年 ...

  7. OpenCv结构和内容

    OpenCv的结构和内容 OpenCv源码组成结构其中包括cv, cvauex, cxcore, highgui, ml这5个模块 CV:图像处理和视觉算法 MLL:统计分类器 HighGui:GUI ...

  8. OpenCV+OpenGL 双目立体视觉三维重建

    0.绪论 这篇文章主要为了研究双目立体视觉的最终目标--三维重建,系统的介绍了三维重建的整体步骤.双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维 ...

  9. python调用opencv库教程

    OpenCV安装pip install --upgrade setuptoolspip install numpy Matplotlibpip install opencv-python OpenCV ...

  10. 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造

    原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/8067881 尺度空间理论   自然界中的物体随着观测尺度不同有不同的表现形态.例如我们形 ...

随机推荐

  1. linux下Oracle11g RAC搭建(九)

    linux下Oracle11g RAC搭建(九) 八.创建ASM仓储 相同在图形化界面操作 [root@node1 ~]#  su - grid [grid@node1 ~]$ asmca   //创 ...

  2. 使用zTree和json构建简单树节点

    我们经常碰到须要构建树结构展示的情况,我推荐使用zTree和JSON. 比如: <? php /** * * 使用zTree和json构建树节点 * */ $arr = array( 0=> ...

  3. ZooKeeper集群安装

    ZooKeeper是Apache提供的.分布式服务协调系统,应用比較广泛. 由于项目中使用Kafka MQ,而Kafka全然使用ZooKeeper实现Kafka各组件的服务协调,包含Broker.Co ...

  4. 采用keepalived施工可用性MySQL-HA

    描述了使用keepalived施工可用性MySQL-HA,两个保证MySQL数据一致性,然后,keepalived虚拟IP,经keepalived内置的在线监测功能来实现MySQL. AD: 关于My ...

  5. 使用装饰器模式动态设置Drawable的ColorFilter

    使用装饰器模式动态设置Drawable的ColorFilter 欢迎各位关注我的新浪微博:微博 转载请标明出处(kifile的博客) 非常多时候我们都希望Android控件点击的时候,有按下效果,选中 ...

  6. SVN 右下角各种符号

    黄色感叹号(有冲突): --这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不 允许你提交,防止你的提交覆盖了 ...

  7. 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第五步)(2)

    把下载下来的"hadoop-2.2.0.tar.gz"复制到"/usr/local/hadoop/"文件夹下并解压: 改动系统配置文件,改动~/.bashrc文 ...

  8. Windows Phone开发(11):常用控件(下)

    原文:Windows Phone开发(11):常用控件(下) WP控件大部分都可以从Silverlight中继承过来,这里我也只能拿一部分作演示,对于其它控件如何使用,可以参考SDK相关说明以及Sil ...

  9. UNIX环境高级编程——Linux进程地址空间和虚拟内存

    一.虚拟内存 分段机制:即分成代码段,数据段,堆栈段.每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权级(用户),每当程序试图访问(权限又分为可读.可写和可执行)一个 ...

  10. log4j 实例 , 浅析

    一.新建log4j.propperties,放在工程的src目录下. #fileAppender log4j.rootCategory = DEBUG,file,consoleAppender log ...