代码:

#include<cv.h>
#include<highgui.h>
int main(void)
{
cvNamedWindow("cmp");
IplImage *temp = cvLoadImage("sample.jpg");//载入
IplImage *src = cvCreateImage(CvSize(temp->width*0.5,temp->height*0.5), temp->depth,temp->nChannels);//缩放
cvResize(temp, src);
IplImage *srctemp = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
IplImage *total = cvCreateImage(CvSize(src->width *5, src->height ), src->depth, src->nChannels); IplImage *open = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
IplImage *close = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
IplImage *gradient = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
IplImage *tophat = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
IplImage *blackhat = cvCreateImage(cvGetSize(src), src->depth, src->nChannels); cvZero(srctemp);
cvZero(total); cvZero(open);
cvZero(close);
cvZero(gradient);
cvZero(tophat);
cvZero(blackhat); IplConvKernel *kernel = cvCreateStructuringElementEx(3,3,2,2,CV_SHAPE_ELLIPSE); cvMorphologyEx(src, open, srctemp, kernel, CV_MOP_OPEN);
cvMorphologyEx(src, close, srctemp, kernel, CV_MOP_CLOSE);
cvMorphologyEx(src, gradient, srctemp, kernel, CV_MOP_GRADIENT);
cvZero(srctemp);
cvMorphologyEx(src, tophat, srctemp, kernel, CV_MOP_TOPHAT);
cvMorphologyEx(src, open, srctemp, kernel, CV_MOP_BLACKHAT);
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1, 1, 2, 2, CV_AA);
cvPutText(open, "open", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
cvPutText(close, "close", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
cvPutText(gradient, "gradient", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
cvPutText(tophat, "tophat", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
cvPutText(blackhat, "blackhat", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
int width = src->width;
int height = src->height; cvSetImageROI(total, CvRect(0, 0, width, height));
cvCopy(open, total);
cvResetImageROI(total); cvSetImageROI(total, CvRect(width, 0, width, height));
cvCopy(close, total);
cvResetImageROI(total); cvSetImageROI(total, CvRect(width*2, 0, width, height));
cvCopy(gradient, total);
cvResetImageROI(total); cvSetImageROI(total, CvRect(width * 3, 0, width, height));
cvCopy(tophat, total);
cvResetImageROI(total); cvSetImageROI(total, CvRect(width * 4, 0, width, height));
cvCopy(blackhat, total);
cvResetImageROI(total); cvShowImage("cmp", total);
cvWaitKey(0);
cvSaveImage("out.png", total);
cvDestroyAllWindows();
cvReleaseImage(&temp);
cvReleaseImage(&src);
cvReleaseImage(&srctemp);
cvReleaseImage(&total);
cvReleaseImage(&open);
cvReleaseImage(&close);
cvReleaseImage(&gradient);
cvReleaseImage(&tophat);
cvReleaseImage(&blackhat); return 0;
}

  

效果:

OpenCV学习笔记——形态学梯度操作的更多相关文章

  1. OpenCV学习笔记3

    OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...

  2. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  3. OpenCV学习笔记5

    OpenCV学习笔记5 图像变换 傅里叶变换 这里可以先学习一下卷积分,了解清除卷积的过程和实际意义,在看这一章节的内容. 原理: 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离 ...

  4. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  5. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  6. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  7. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  8. OpenCV 学习笔记(模板匹配)

    OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...

  9. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

随机推荐

  1. css样式,层叠顺序属性z-index

    在做项目的时候,居然单击后显示的顺序一直被别的li标签压着,最后终于找到了,是css的z-index属性赋值了,值越大,显示的层就越高 详情推荐百度百科:z-index z-index是针对网页显示中 ...

  2. jsp url传值乱码

    <Connector port="8080" maxHttpHeaderSize="8192" minProcessors="10"  ...

  3. Codeforces Round #321 (Div. 2)C(tree dfs)

    题意:给出一棵树,共有n个节点,其中根节点是Kefa的家,叶子是restaurant,a[i]....a[n]表示i节点是否有猫,问:Kefa要去restaurant并且不能连续经过m个有猫的节点有多 ...

  4. 【ACM】HDU1008 Elevator 新手题前后不同的代码版本

    [前言] 很久没有纯粹的写写小代码,偶然想起要回炉再来,就去HDU随便选了个最基础的题,也不记得曾经AC过:最后吃惊的发现,思路完全不一样了,代码风格啥的也有不小的变化.希望是成长了一点点吧.后面定期 ...

  5. poj 2392 多重背包

    题意:有几个砖,给出高度,能放的最大高度和数目,求这些砖能垒成的最大高度 依据lim排个序,按一层一层进行背包 #include<cstdio> #include<iostream& ...

  6. java acm输入输出

    转自:http://wei.jian.fei.blog.163.com/blog/static/97300140201081425159217/ 下面说一下ACM-ICPC队员初用Java编程所遇到的 ...

  7. Android 颜色Color(转)

    摘自:http://blog.sina.com.cn/s/blog_6f3ff2c90100t2oa.html Android中使用4个数字来表示颜色,分别是alpha.红(red).绿(green) ...

  8. Xamarin开发Anroid应用介绍

    第1章  Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热.但是在Android平台下只能使用Java开发,iOS平台下也只能使用Obj ...

  9. Sprint第一个冲刺(第十一天)

    一.Sprint介绍 修改登录信息界面(修改用户名.密码.邮箱.电话.年龄),且同步到云端:修改Item布局:增添设置页. 实验截图: 任务进度: 二.Sprint周期 看板: 燃尽图:

  10. bug记录

    1>-[DYMessageNewsTableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]: row (37 ...