膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现
前言
膨胀就是对图中的每个像素取其核范围内最大的那个值,腐蚀就相反。这两个操作常用来突出显示图的某个高亮部分或者昏暗部分以及去噪。本文展示两个分别对图像进行膨胀和腐蚀的例子。
膨胀和腐蚀函数 cvErode() 和 cvDilate()
函数原型:
// 膨胀函数
void cvcvDilate (
IplImage *src, // 待处理图像
IplImage dst, // 处理后图像
IplConvKernel * B = NULL, // 自定义卷积核
int iterations = // 是否进行迭代
); // 腐蚀函数
void cvErode (
IplImage *src, // 待处理图像
IplImage dst, // 处理后图像
IplConvKernel * B = NULL, // 自定义卷积核
int iterations = // 是否进行迭代
);
一般来说,后面两个参数用的不多,就用它的默认参数好了。
代码示例 - 膨胀
// 此头文件包含图像IO函数的声明
#include "highgui.h"
// 此头文件包含基本的图像处理函数和高级计算机视觉算法
#include "cv.h" int main (void) { // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
IplImage * img = cvLoadImage ("D:\\1.jpg"); // 创建一个窗口显示处理前的图像
cvNamedWindow ("膨胀前", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("膨胀前", img); // 创建一个新的图像内存块,以存放处理后的结果。
IplImage * out = cvCreateImage (
cvGetSize (img),
img->depth,
img->nChannels
); // 膨胀函数
cvDilate (
img, // 输入图像
out // 输出图像
); // 创建一个窗口显示处理后的图像
cvNamedWindow ("膨胀后", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("膨胀后", out); // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
// 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
cvWaitKey (); // 释放图像内存块
cvReleaseImage (&img);
cvReleaseImage (&out); // 关闭窗口同时释放窗口内存块
cvDestroyWindow ("膨胀前");
cvDestroyWindow ("膨胀后"); return ;
}
运行结果


代码示例 - 腐蚀
// 此头文件包含图像IO函数的声明
#include "highgui.h"
// 此头文件包含基本的图像处理函数和高级计算机视觉算法
#include "cv.h" int main (void) { // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
IplImage * img = cvLoadImage ("D:\\1.jpg"); // 创建一个窗口显示处理前的图像
cvNamedWindow ("腐蚀前", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("腐蚀前", img); // 创建一个新的图像内存块,以存放处理结果。
IplImage * out = cvCreateImage (
cvGetSize (img),
img->depth,
img->nChannels
); // 腐蚀函数
cvErode (
img, // 输入图像
out // 输出图像
); // 创建一个窗口显示处理后的图像
cvNamedWindow ("腐蚀后", CV_WINDOW_AUTOSIZE); // 将图像装载进窗口并显示此窗口
cvShowImage ("腐蚀后", out); // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
// 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
cvWaitKey (); // 释放图像内存块
cvReleaseImage (&img);
cvReleaseImage (&out); // 关闭窗口同时释放窗口内存块
cvDestroyWindow ("腐蚀前");
cvDestroyWindow ("腐蚀后"); return ;
}
运行结果


小结
基于这两个操作,能产生诸如开运算,闭运算等更加复杂的运算。
在此不做累述。
膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现的更多相关文章
- cvErode和cvDilate腐蚀和膨胀函数
Erode腐蚀,Dilate膨胀,这两个形态学函数总是成对出现,前者可以消除较小独点如噪音,后者可以使不连通的图像合并成块. void cvErode( const CvArr* src, CvArr ...
- OpenCV膨胀和腐蚀示例代码
#include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvL ...
- 学习 opencv---(9)形态学图像处理(一):膨胀和腐蚀
本篇文章中,我们一起探究了图像处理中,最基本的形态学运算--膨胀与腐蚀.浅墨在文章开头友情提醒,用人物照片做腐蚀和膨胀的素材图片得到的效果会比较惊悚,毁三观的,不建议尝试.......... 一.理论 ...
- 图像的膨胀与腐蚀——OpenCV与C++的具体实现
目录 1. 膨胀与腐蚀的原理 2. 膨胀的具体实现 1) OpenCV实现 2) C/C++实现 3) 验证与结果 3. 腐蚀的具体实现 1. 膨胀与腐蚀的原理 膨胀与腐蚀是数学形态学在图像处理中最基 ...
- OpenCV膨胀与腐蚀
膨胀与腐蚀 本篇博客主要介绍使用OpenCV中的函数接口实现对一个图片的腐蚀或者膨胀,听起来有点像是对图像进行放大和缩小的意思,如果你也是这样认为,那我只能说你跟我一样肤浅!!在OpenCV中几乎所有 ...
- 膨胀、腐蚀、开、闭(matlab实现)
膨胀.腐蚀.开.闭运算是数学形态学最基本的变换. 本文主要针对二值图像的形态学 膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔): B=[0 1 0 1 1 1 ...
- Atitit 图像处理—图像形态学(膨胀与腐蚀)
Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop ...
- paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学
膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...
- OpenCV——图像处理入门:膨胀与腐蚀、图像模糊、边缘检测
全部外部依赖项: opencv_aruco341d.lib opencv_bgsegm341d.lib opencv_calib3d341d.lib opencv_bioinspired341d.li ...
随机推荐
- JDBC连接池&DBUtils使用
使用连接池改造JDBC的工具类: 1.1.1 需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...
- Python_代码练习_写一个判断是否为小数的函数
这两天在学习函数,练习写一个判断是否为小数的函数,看起来蛮简单的,飞速写完很是得意,然后测了一下,发现差得好多呀,这个并不像想象那样简单,我得到的教训是,想要把一个需求哪怕再小的需求考虑周全,都不是件 ...
- java 修改字体大小
在Windows->Preferences->General->Appearance->Colors and Fonts->Java->Java Editor Te ...
- Block为什么使用Copy?
block:本质就是一个object-c对象block:存储位置,可能分为3个地方:代码去,堆区.栈区(ARC情况下会自动拷贝到堆区,因此ARC下只能有两个地方:代码去.堆区)代码区:不访问栈区的变量 ...
- PHP中的stristr(),strstr(),strpos()速度比较
测速代码: <?php function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); ret ...
- (7)JavaScript-BOM(浏览器对象模 型)
window 对象 全局作用域 在浏览器中, window 对象有双重角色,它既是通过 JavaScript 访问浏览器窗口的一个接口,又是 ECMAScript 规定的 Global 对象. 所有在 ...
- Xamarin XAML语言教程Visual Studio中实现XAML预览
Xamarin XAML语言教程Visual Studio中实现XAML预览 每次通过编译运行的方式查看XAML文件效果,需要花费大量的时间.如果开发者使用XAML对UI进行布局和设计,可以通过预览的 ...
- iphone开发-SQLite数据库使用
我现在要使用SQLite3.0创建一个数据库,然后在数据库中创建一个表格. 首先要引入SQLite3.0的lib库.然后包含头文件#import <sqlite3.h> [1]打开数据库, ...
- andriod GridLayout
来自:http://blog.csdn.net/jianghuiquan/article/details/8299973 GridLayout网格布局 android4.0以上版本出现的GridLay ...
- 学习和家庭教育 z
大家好,我是王宁. 今天能站在这里,纯属偶然. 为什么说偶然呢? 因为,南雅是个人才济济的地方,164班是一个优秀的集体. 个人认为,班级前二十几名的同学,时机适宜,谁考班上第一名都有可能. 妈妈对我 ...