zoukankan      html  css  js  c++  java
  • 形态学边界提取

    Opencv中函数getStructuringElement()可以生成形态学操作中用到的核,函数原型:

    Mat getStructuringElement(int shape, //核的形状  0:矩形  1:十字交叉形  2: 椭圆 
    						  Size ksize,//核大小
    						  Point anchor=Point(-1,-1) //核中心位置,默认位于形状中心处
    						  );


    矩形、十字交叉形和椭圆形的区别可以通过输出矩阵对比一下:

    #include "core/core.hpp"
    #include "highgui/highgui.hpp"
    #include "imgproc/imgproc.hpp"
    #include <iostream>
    
    using namespace cv;
    
    int main(int argc,char *argv[])
    {
    	Mat elementRect,elementCross,elementEllipse;
    	elementRect=getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1));
    	elementCross=getStructuringElement(MORPH_CROSS,Size(3,3),Point(-1,-1));
    	elementEllipse=getStructuringElement(MORPH_ELLIPSE,Size(3,5),Point(-1,-1));
    
    	std::cout<<"3*3矩形核:"<<std::endl<<elementRect<<std::endl;
    	std::cout<<"3*3十字叉形核:"<<std::endl<<elementCross<<std::endl;
    	std::cout<<"3*3椭圆形核:"<<std::endl<<elementEllipse<<std::endl;
    	system("pause");
    }

    输出:



    膨胀从字面上理解就知道是对图像胀大的操作,使图像中的物体的轮廓向外发散,体积变大;

    腐蚀从字面上理解就知道是对图像缩小的操作,腐蚀了就意味着图像中物体的边界被侵蚀了,轮廓向内收缩,体积变小了。

    要注意的是这里的膨胀和腐蚀的概念是针对图像中高亮区域而言的(二值图像中对应像素值255,白色),变大和缩小也是针对图像中高亮的部分。

    所以对图像执行膨胀,对高亮区域是胀大,面积增大,对暗区域相当于是腐蚀,面积缩小。


    下边的小程序利用形态学的膨胀和腐蚀操作提取边界。

    #include "core/core.hpp"
    #include "highgui/highgui.hpp"
    #include "imgproc/imgproc.hpp"
    
    using namespace cv;
    
    
    int main(int argc,char *argv[])
    {
    	Mat image,imageGray,imageDilate,imageErode,imageBorder;
    	image=imread(argv[1]);
    	resize(image,image,Size(400,400));
    	cvtColor(image,imageGray,CV_RGB2GRAY);
    
    	//enum { MORPH_RECT=0, MORPH_CROSS=1, MORPH_ELLIPSE=2 };
    	Mat element=getStructuringElement(1,Size(3,3),Point(-1,-1));
    	dilate(imageGray,imageDilate,element,Point(-1,-1));
    	erode(imageGray,imageErode,element,Point(-1,-1));
    	imageBorder=imageDilate-imageErode;
    	imshow("Source image",image);
    	imshow("Dilate",imageDilate);
    	imshow("Erode",imageErode);
    	imshow("Border",imageBorder);	
    	waitKey();
    }
    




  • 相关阅读:
    AspNet WebApi 中应用fo-dicom抛出异常:No codec registered for tranfer syntax:
    Codeforces Round #261 (Div. 2)459A. Pashmak and Garden(数学题)
    Android开发之使用Web Service进行网络编程
    线段树 + 扫描线加深具体解释
    对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)
    lscript.ld 链接器脚本
    iOS 系统地图实现及定位
    Perl怎样过滤html标签
    hdu1213 How Many Tables(并查集)
    数据结构——链表
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411997.html
Copyright © 2011-2022 走看看