代码:

  1. #include<cv.h>
  2. #include<highgui.h>
  3. int main(void)
  4. {
  5. cvNamedWindow("cmp");
  6. IplImage *temp = cvLoadImage("sample.jpg");//载入
  7. IplImage *src = cvCreateImage(CvSize(temp->width*0.5,temp->height*0.5), temp->depth,temp->nChannels);//缩放
  8. cvResize(temp, src);
  9. IplImage *srctemp = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
  10. IplImage *total = cvCreateImage(CvSize(src->width *5, src->height ), src->depth, src->nChannels);
  11.  
  12. IplImage *open = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
  13. IplImage *close = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
  14. IplImage *gradient = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
  15. IplImage *tophat = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
  16. IplImage *blackhat = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
  17.  
  18. cvZero(srctemp);
  19. cvZero(total);
  20.  
  21. cvZero(open);
  22. cvZero(close);
  23. cvZero(gradient);
  24. cvZero(tophat);
  25. cvZero(blackhat);
  26.  
  27. IplConvKernel *kernel = cvCreateStructuringElementEx(3,3,2,2,CV_SHAPE_ELLIPSE);
  28.  
  29. cvMorphologyEx(src, open, srctemp, kernel, CV_MOP_OPEN);
  30. cvMorphologyEx(src, close, srctemp, kernel, CV_MOP_CLOSE);
  31. cvMorphologyEx(src, gradient, srctemp, kernel, CV_MOP_GRADIENT);
  32. cvZero(srctemp);
  33. cvMorphologyEx(src, tophat, srctemp, kernel, CV_MOP_TOPHAT);
  34. cvMorphologyEx(src, open, srctemp, kernel, CV_MOP_BLACKHAT);
  35. CvFont font;
  36. cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1, 1, 2, 2, CV_AA);
  37. cvPutText(open, "open", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
  38. cvPutText(close, "close", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
  39. cvPutText(gradient, "gradient", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
  40. cvPutText(tophat, "tophat", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
  41. cvPutText(blackhat, "blackhat", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
  42. int width = src->width;
  43. int height = src->height;
  44.  
  45. cvSetImageROI(total, CvRect(0, 0, width, height));
  46. cvCopy(open, total);
  47. cvResetImageROI(total);
  48.  
  49. cvSetImageROI(total, CvRect(width, 0, width, height));
  50. cvCopy(close, total);
  51. cvResetImageROI(total);
  52.  
  53. cvSetImageROI(total, CvRect(width*2, 0, width, height));
  54. cvCopy(gradient, total);
  55. cvResetImageROI(total);
  56.  
  57. cvSetImageROI(total, CvRect(width * 3, 0, width, height));
  58. cvCopy(tophat, total);
  59. cvResetImageROI(total);
  60.  
  61. cvSetImageROI(total, CvRect(width * 4, 0, width, height));
  62. cvCopy(blackhat, total);
  63. cvResetImageROI(total);
  64.  
  65. cvShowImage("cmp", total);
  66. cvWaitKey(0);
  67. cvSaveImage("out.png", total);
  68. cvDestroyAllWindows();
  69. cvReleaseImage(&temp);
  70. cvReleaseImage(&src);
  71. cvReleaseImage(&srctemp);
  72. cvReleaseImage(&total);
  73. cvReleaseImage(&open);
  74. cvReleaseImage(&close);
  75. cvReleaseImage(&gradient);
  76. cvReleaseImage(&tophat);
  77. cvReleaseImage(&blackhat);
  78.  
  79. return 0;
  80. }

  

效果:

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. sql,联合主键,按id分组求版本号最大值的集合

    表结构如下: /* SQLyog v10.2 MySQL - 5.5.39 ************************************************************** ...

  2. [Android Pro] 利用tcpdump和wireshark对android网络请求进行分析

    一: tcpdump操作流程 1. 手机要有root权限 2. 下载tcpdump   http://www.strazzere.com/android/tcpdump 3. adb push c:\ ...

  3. 铺地毯(luogu 1003)

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  4. 新浪SAE部署 503 JDK版本冲突解决

    上午把本地调试好的微信应用部署到SAE上,结果访问503错误.关键日志:—————————————————————————————————org.eclipse.jetty.servlet.Servl ...

  5. Java Hour 40 Maven ( 2 )

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 40 Maven 坐标 任何一个包都需要一个全世界唯一的id, Ma ...

  6. Java Hour 13 集合基础

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为13 Hour,请各位不吝赐教. Java 中的集 ...

  7. PHP 判断数组里的值是否有存在

     一维数组检测<?php  $a = array('as','ddf','ddf','as','qwe','wer','ert'); $res = array_unique($a); var_d ...

  8. Struts2 Struts.xml DTD 说明

    转自:http://blog.csdn.net/cuixiuqin1954/article/details/4228741 关于Struts2中的核心配置文件struts.xml,就其DTD(Docu ...

  9. 自定义漂亮的Android SeekBar样式

    系统自带的SeekBar真是太难看了,不能容忍! 只能自己做了,先来张效果图 第1个Seekbar 背景是颜色,thumb是图片,上代码: <SeekBar android:id="@ ...

  10. 神奇的HTML5离线存储(应用程序缓存)

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接前端小尚,谢谢! 前言 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. HTML5引入 ...