开运算 (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. HttpClient(联网)

    抽样: void GameRequest::initRequset(const char* url, cocos2d::CCObject* pTarget, cocos2d::SEL_CallFunc ...

  2. Oracle自增列创建方法

    最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同. Oracle没有自增字段这样的功能,但是通过触发器( ...

  3. linux环境下的线程的创建问题

    pthread_create函数用于创建一个线程 函数原型 #include<pthread.h> int pthread_create(pthread_t *restrict tidp, ...

  4. "最大工作进程数"导致的WCF调用失败

    WCF服务寄宿在IIS中,当设置其“最大工作进程数”>1时,经常会出现服务无法被成功调用 客户端异常为System.ServiceModel.Security.MessageSecurityEx ...

  5. sublime text 2安装及使用

    1.首先下载Sublime Text:http://www.sublimetext.com/ 2.基本设置.參考此文:http://blog.jobbole.com/40660/ { "au ...

  6. ftp桥接到http服务

    先说一下我的需求:我的linodeserver近期ftp和sftp连不上了,port被封了.仅仅有http能够訪问,我没有办法上传文件了.由于我寻常都用beyond compare上传文件,非常方便. ...

  7. hdu1005 Number Sequence(寻找循环节)

    主题链接: pid=1005">huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力 ...

  8. 递归算法的数据结构和算法 C++和PHP达到

    递归算法:它是一种间接的方法调用本身,直接或. 实施过程:按功能或子程序完成.在函数编写代码或子程序直接或间接拥有被称为.你可以完成递归. (相同类型的问题,子问题到最小问题有已知条件,然后来求解,然 ...

  9. WPF 3D 常用类(1)

    原文:WPF 3D 常用类(1) 几何数据相关类 Geometry3D 抽象类, 用于定义物体的几何数据, 可用于计算HitTest和BoundingBox MeshGeometry3D Geomet ...

  10. java命令行HPROF Profiler(转)

    The HPROF Profiler The Heap and CPU Profiling Agent (HPROF)是JAVA2 SDK自带的一个简单的profiler代理,它通过与Java Vir ...