博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【OpenCV学习】图像的形态处理学
阅读量:7201 次
发布时间:2019-06-29

本文共 2592 字,大约阅读时间需要 8 分钟。

数学形态运算,最常见的基本运算有七种,分别为:腐蚀、膨胀、开运算、闭运算、击中、细化和粗化,它们是全部形态学的基础。********************************/#include "cv.h"#include "highgui.h"#include 
#include
IplImage *src=/blog.armyourlife.info/0;IplImage *dst=0;IplConvKernel *element=0;//声明一个结构元素int element_shape=CV_SHAPE_RECT;//长方形形状的元素int max_iters=10;int open_close_pos=0;int erode_dilate_pos=0;void OpenClose(int pos){ int n=open_close_pos-max_iters; int an=n>0?n:-n; element = cvCreateStructuringElementEx(an*2+1, an*2+1,an,an,element_shape,0);//创建结构元素 if (n<0) { cvErode(src,dst,element,1);//腐蚀图像 cvDilate(dst,dst,element,1);//膨胀图像 } else { cvDilate(dst,dst,element,1);//膨胀图像 cvErode(src,dst,element,1);//腐蚀图像 } cvReleaseStructuringElement(&element); cvShowImage("Open/Close",dst);}void ErodeDilate(int pos){ int n=erode_dilate_pos-max_iters; int an=n>0?n:-n; element = cvCreateStructuringElementEx(an*2+1,an*2+1,an,an,element_shape,0); if (n<0) { cvErode(src,dst,element,1); } else { cvDilate(src,dst,element,1); } cvReleaseStructuringElement(&element); cvShowImage("Erode/Dilate",dst);}int main(int argc,char **argv){ char *filename =argc ==2?argv[1]:(char *)"lena.jpg"; if( (src = /blog.armyourlife.info/cvLoadImage(filename,1)) == 0 ) return -1; dst=cvCloneImage(src); cvNamedWindow("Open/Close",1); cvNamedWindow("Erode/Dilate",1); open_close_pos = erode_dilate_pos = max_iters; cvCreateTrackbar("iterations","Open/Close",&open_close_pos,max_iters*2+1,OpenClose); cvCreateTrackbar("iterations","Erode/Dilate",&erode_dilate_pos,max_iters*2+1,ErodeDilate); for (;;) { int c; OpenClose(open_close_pos); ErodeDilate(erode_dilate_pos); c= cvWaitKey(0); if (c==27) { break; } switch(c) { case 'e': element_shape=CV_SHAPE_ELLIPSE; break; case 'r': element_shape=CV_SHAPE_RECT; break; case '/r': element_shape=(element_shape+1)%3; break; default: break; } } cvReleaseImage(&src); cvReleaseImage(&dst); cvDestroyWindow("Open/Close"); cvDestroyWindow("Erode/Dilate"); return 0;}/*****************************腐蚀和膨胀,看上去好像是一对互逆的操作,实际上,这两种操作不具有互逆的关系。开运算和闭运算正是依据腐蚀和膨胀的不可逆性,演变而来的。先腐蚀后膨胀的过程就称为开运算。闭运算是通过对腐蚀和膨胀的另一种不同次序的执行而得到的,闭运算是先膨胀后腐蚀的过程,其功能是用来填充物体内细小空洞、连接邻近物体、平滑其边界,同时不明显改变不明显改变其面积。本文转自gnuhpc博客园博客,原文链接http://www.cnblogs.com/gnuhpc/archive/2012/10/13/2722892.html,如需转载请自行联系原作者
你可能感兴趣的文章
MySQL 存储引擎的基本常识和一些命令
查看>>
Java的新项目学成在线笔记-day13(十)
查看>>
丰田公司的精益生产的精髓是什么?
查看>>
使用VS2010写下的第一个程序
查看>>
2017白领年终奖调查出炉,程序员扎心了!
查看>>
单用户、救援模式,克隆虚拟机,Linux互相连接
查看>>
分布式事务解决方案——柔性事务与服务模式
查看>>
利用Python做绝地科学家(外挂篇)
查看>>
Linux基于php-fpm模式的lamp搭建
查看>>
费下载最新版万能视频格式转换器是一款功能强大的全能视频格式转换软件
查看>>
linux clamav 免费查毒工具
查看>>
常见三种存储方式DAS、NAS、SAN的架构及比较
查看>>
算法实战——多叉树全路径遍历
查看>>
软件过程评估环境与要求
查看>>
oracle数据泵导入分区表统计信息报错(五)
查看>>
Oracle DG 最大保护模式的实现
查看>>
centos 6.5安装视频×××
查看>>
AlwaysOn 可用性组方案
查看>>
Linux Windows对NTFS移动盘的写入
查看>>
document.body.scrollTop 值总为0
查看>>