opencv中的更通用的形态学
为了处理更为复杂的情况,opencv中还支持更多的形态学变换。
| 形态学名称 | 操作过程 | 操作名称 | 是否需要temp参数 |
| 开操作 open | open(src)=先腐蚀,后膨胀 | CV_MOP_OPEN | 否 |
| 闭操作 close | close(src)=先膨胀,后腐蚀 | CV_MOP_CLOSE | 否 |
| 形态梯度 gradient | gradient(src)=dilate(scr)-erode(src) | CV_MOP_GRADIENT | 总是 |
| “礼帽” topHat | topHat(src)=src-open(src) | CV_MOP_TOPHAT | src=dst的时候需要 |
| “黑帽”blackHat | blackHat(src)=close(src)-src | CV_MOP_BLACKHAT | src=dst的时候需要 |
调用的函数:
CVAPI(void) cvMorphologyEx( const CvArr* src, CvArr* dst,
CvArr* temp, IplConvKernel* element,
int operation, int iterations CV_DEFAULT() );
前两个函数前面讲过了,注意到这里多了个temp的参数,因为图形变换的时候是需要临时变量的,使用该数组时,应该与原数组大小相同。(但这里有点纳闷的是,为毛处理代码不自己生成个临时变量,需要用户自己传入temp,这里就有些不懂= =),第四个介绍过了,是自定义的模板,第五个是传入上面表格中的操作名称,这样就会做相应的操作,最后一个也是前面介绍过的迭代次数。
测试代码:
#include "stdafx.h"
#include "cv.h"
#include "highgui.h" int main(){
IplImage *img= cvLoadImage("C:/CIR.jpg");//读取图片
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example4",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example5",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Example6",CV_WINDOW_AUTOSIZE); cvShowImage("Example1",img);//在Example1显示图片
// cvCopy(img,temp);
IplImage* temp=cvCreateImage( //创建一个size为image,三通道8位的彩色图
cvGetSize(img),
IPL_DEPTH_8U, ); //IplConvKernel * myModel;
//myModel=cvCreateStructuringElementEx( //自定义5*5,参考点(3,3)的矩形模板
// 5,5,2,2,CV_SHAPE_RECT
// ); //cvErode(img,temp,myModel,1);
cvMorphologyEx(
img,temp,temp,,CV_MOP_OPEN,
);
cvShowImage("Example2",temp); cvMorphologyEx(
img,temp,temp,,CV_MOP_CLOSE,
);
cvShowImage("Example3",temp); cvMorphologyEx(
img,temp,temp,,CV_MOP_GRADIENT,
);
cvShowImage("Example4",temp); cvMorphologyEx(
img,temp,temp,,CV_MOP_TOPHAT,
);
cvShowImage("Example5",temp); cvMorphologyEx(
img,temp,temp,,CV_MOP_BLACKHAT,
);
cvShowImage("Example6",temp);
cvWaitKey();//暂停用于显示图片 //cvReleaseStructuringElement(&myModel);
cvReleaseImage(&img);//释放img所指向的内存空间并且
cvDestroyWindow("Example1");
cvDestroyWindow("Example2");
cvDestroyWindow("Example3");
cvDestroyWindow("Example4");
cvDestroyWindow("Example5");
cvDestroyWindow("Example6");
return ;
}
测试结果:


参考:学习opencv
opencv中的更通用的形态学的更多相关文章
- OpenCV中的常用函数
1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...
- 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...
- opencv中的图像形态学——腐蚀膨胀
腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等. 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即 ...
- OpenCV中cv2的用法
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
- [OpenCV-Python] OpenCV 中的图像处理 部分 IV (二)
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 16 图像平滑 目标 • 学习使用不同的低通滤波器对图像进行模糊 • 使用自定义的滤波器对图像进行卷积(2D 卷 ...
- [OpenCV-Python] OpenCV 中的图像处理 部分 IV (六)
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 23 图像变换 23.1 傅里叶变换目标本小节我们将要学习: • 使用 OpenCV 对图像进行傅里叶变换 • ...
- [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)
部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函 ...
- [OpenCV-Python] OpenCV 中视频分析 部分 VI
部分 VI视频分析 OpenCV-Python 中文教程(搬运)目录 39 Meanshift 和 和 Camshift 目标 • 本节我们要学习使用 Meanshift 和 Camshift 算法在 ...
- OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...
随机推荐
- 有名管道mkfifo
int mkfifo(const char *pathname, mode_t mode); int mknod(const char *pathname, mode_t mode, dev_t de ...
- Hexo博客搭建教程
1.使用淘宝npm源 $ npm install -g cnpm --registry=https://registry.npm.taobao.org 2.安装hexo cnpm install -g ...
- 1.5 C++ new和delete操作符
参考:http://www.weixueyuan.net/view/6331.html 在C语言中,动态分配和释放内存的函数是malloc.calloc和free,而在C++语言中,new.new[] ...
- SharePoint Word Service-PowerShell
1. 配置转换进程 Set-SPWordConversionServiceApplication –Identity "Word Automation Services" –Act ...
- ReactNative——UI2.组件生命周期
对于习惯了iOS开发的同学,可能会对React Native中组件的生命周期很困惑.在iOS中有一个ViewDidLoad来初始化,那么在RN中,又是在哪里呢? 一.看图分析 在下图中描述了React ...
- C#读写基恩士PLC 使用TCP/IP 协议 MC协议
本文将使用一个Github开源的组件库技术来读写基恩士PLC数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 g ...
- preprocessor设置调试宏
调试宏:preprocessor设置 预处理器“调试”宏在Xcode项目模板的调试版本定义.预处理宏在编译时被解释和调试宏可以用来允许调试代码运行在调试版本中你的项目.如果你不确定你的项目已经确定,可 ...
- [编程题] N阶楼梯上楼问题
import sys for line in sys.stdin: N=int(line.split()[0]) d1=1 d2=2 if(N==1): print 1 continue elif(N ...
- HihoCoder - 1789:阶乘问题 (简单数学)
描述 给定 n, k,求一个最大的整数 m,使得 km 是 n! 的约数 输入 第一行两个正整数 n, k 2 ≤ n,k ≤ 109 输出 输出最大的 m 样例输入 5 2 样例输出 3 思路:我们 ...
- Microsoft - Find the K closest points to the origin in a 2D plane
Find the K closest points to the origin in a 2D plane, given an array containing N points. 用 max hea ...