为了处理更为复杂的情况,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中的更通用的形态学的更多相关文章

  1. OpenCV中的常用函数

    1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...

  2. 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  3. opencv中的图像形态学——腐蚀膨胀

    腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等. 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即 ...

  4. OpenCV中cv2的用法

    一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志  cv2.IMREAD_COLOR:默认参数 ...

  5. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (二)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 16 图像平滑 目标 • 学习使用不同的低通滤波器对图像进行模糊 • 使用自定义的滤波器对图像进行卷积(2D 卷 ...

  6. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (六)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 23 图像变换 23.1 傅里叶变换目标本小节我们将要学习: • 使用 OpenCV 对图像进行傅里叶变换 • ...

  7. [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)

    部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函 ...

  8. [OpenCV-Python] OpenCV 中视频分析 部分 VI

    部分 VI视频分析 OpenCV-Python 中文教程(搬运)目录 39 Meanshift 和 和 Camshift 目标 • 本节我们要学习使用 Meanshift 和 Camshift 算法在 ...

  9. OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...

随机推荐

  1. SQL调优(SQL TUNING)之远程支持完成性能大幅优化

    前几天,一个朋友找到我,说一个SQL性能有问题,看看能不能优化,下面为过程: 雪豹 9:35:10 在吗 兰花岛主 15:07:39 忙忘了,有事儿? 雪豹 15:07:49 嗯 雪豹 15:07:5 ...

  2. React-Router v4.0 hashRouter使用js跳转

    React-Router v4.0上已经不推荐使用hashRouter,主推browserRouter,但是因为使用browserRouter需要服务端配合可能造成不便,有时还是需要用到hashRou ...

  3. Dos命令下目录操作

    Dos命令下目录操作 1.cd 操作 显示当前目录名或改变当前目录 cd [盘符][路径]                      进入指定盘符下的目录 cd [..]               ...

  4. 小程序中的bindtap和catchtap的区别(交流QQ群:604788754)

    bindtap绑定的节点,如果他的父节点也有绑定事件,点击之后就会出现冒泡. catchtap绑定的节点,如果他的父节点也有绑定事件,点击之后不会出现冒泡.

  5. 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 ...

  6. ZOJ 3161 Damn Couples 动态规划 难度:2

    Damn Couples Time Limit: 1 Second      Memory Limit: 32768 KB As mentioned in the problem "Coup ...

  7. jenkins的流水线pipeline+项目实验php

    声明:实验环境使用Jenkins的应用与搭建的环境 新建一个流水线 pipeline脚本语法架构 node('slave节点名'){ def 变量 #def可以进行变量声明 stage('阶段名A') ...

  8. 基于Dlib、OpenCV开发人脸识别程序的开发建议

    前言 在去年十月的时候参加了一个小比赛,做了一个人脸识别程序并很意外地获得省里面的一等奖,视频演示链接在这里,有同学想要做这方面的毕业设计or课程设计,发一篇博客来分享一下当时的开发过程. 视频演示链 ...

  9. 《C语言中分配了动态内存后一定要释放吗?》

    问:比如main函数里有一句 malloc(),后面没有free()1.那么当main结束后,动态分配的内存不会随之释放吗?2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑? 答: ...

  10. mysql sum(if())用法

    原表:id    fenlei     time1      分类1      201303162      分类2      201303163      分类3      201303174    ...