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 形态 ...
随机推荐
- SQL调优(SQL TUNING)之远程支持完成性能大幅优化
前几天,一个朋友找到我,说一个SQL性能有问题,看看能不能优化,下面为过程: 雪豹 9:35:10 在吗 兰花岛主 15:07:39 忙忘了,有事儿? 雪豹 15:07:49 嗯 雪豹 15:07:5 ...
- React-Router v4.0 hashRouter使用js跳转
React-Router v4.0上已经不推荐使用hashRouter,主推browserRouter,但是因为使用browserRouter需要服务端配合可能造成不便,有时还是需要用到hashRou ...
- Dos命令下目录操作
Dos命令下目录操作 1.cd 操作 显示当前目录名或改变当前目录 cd [盘符][路径] 进入指定盘符下的目录 cd [..] ...
- 小程序中的bindtap和catchtap的区别(交流QQ群:604788754)
bindtap绑定的节点,如果他的父节点也有绑定事件,点击之后就会出现冒泡. catchtap绑定的节点,如果他的父节点也有绑定事件,点击之后不会出现冒泡.
- Filesystem has been set read-only problem.
case: when system is running well ,sudden tf became read-only; analyze: read the kernel log using dm ...
- ZOJ 3161 Damn Couples 动态规划 难度:2
Damn Couples Time Limit: 1 Second Memory Limit: 32768 KB As mentioned in the problem "Coup ...
- jenkins的流水线pipeline+项目实验php
声明:实验环境使用Jenkins的应用与搭建的环境 新建一个流水线 pipeline脚本语法架构 node('slave节点名'){ def 变量 #def可以进行变量声明 stage('阶段名A') ...
- 基于Dlib、OpenCV开发人脸识别程序的开发建议
前言 在去年十月的时候参加了一个小比赛,做了一个人脸识别程序并很意外地获得省里面的一等奖,视频演示链接在这里,有同学想要做这方面的毕业设计or课程设计,发一篇博客来分享一下当时的开发过程. 视频演示链 ...
- 《C语言中分配了动态内存后一定要释放吗?》
问:比如main函数里有一句 malloc(),后面没有free()1.那么当main结束后,动态分配的内存不会随之释放吗?2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑? 答: ...
- mysql sum(if())用法
原表:id fenlei time1 分类1 201303162 分类2 201303163 分类3 201303174 ...