OpenCV学习笔记——形态学梯度操作
代码:
#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学习笔记——形态学梯度操作的更多相关文章
- OpenCV学习笔记3
OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- OpenCV学习笔记5
OpenCV学习笔记5 图像变换 傅里叶变换 这里可以先学习一下卷积分,了解清除卷积的过程和实际意义,在看这一章节的内容. 原理: 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离 ...
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
- OpenCV 学习笔记(模板匹配)
OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...
- OpenCV 学习笔记 07 目标检测与识别
目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...
随机推荐
- iOS两个框架之间的类型转换--"桥接"技术
话不多说,直接举例说明吧.场景模拟:需要开发一个通讯录相关功能,实现访问以及添加等等.这时,需要使用的框架是Core Foundation.而此框架使用的是C语言,例如:CFArrayRef,CFSt ...
- Lucene实践
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能. OK,大家都知道这个是一个搜索检索工具,那究竟是怎么做检索的,其实道理是 ...
- 图解VS2010打包全过程(转)
最近刚刚打包发布了用VS2010开发的一个收费系统,借此讲一讲打包过程,供大家参考. 首先打开已经完成的工程,如图: 下面开始制作安装程序包. 第一步:[文件]——[新建]——[项目]——安装项目. ...
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- 电赛菜鸟营培训(一)——STM32F103CB之LED控制
一.STM32F103C8 引脚分布 二.LED的共阴.共阳接法 这里应该是七段数码管的接法. 限流电阻选择为470,在Multism中仿真,也需要接入,否则会出现闪烁情况.或者直接更改属性. 三.消 ...
- Servlet应用的运行流程
其中,红色部分为我们开发人员要做的,其他部分是框架做的. 学习就要搞懂整个运行的流程!否则,不利于个人技术的积累!
- js拆分数组
<script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new A ...
- Hark的数据结构与算法练习之桶排序
算法说明 桶排序的逻辑其实特别好理解,它是一种纯粹的分而治之的排序方法. 举个例子简单说一下大家就知道精髓了. 假如对11,4,2,13,22,24,20 进行排序. 那么,我们将4和2放在一起,将1 ...
- Android 编程下短信监听在小米手机中失效的解决办法
相信很多人写的短信监听应用在小米手机上是拦截不到短信的,这是因为小米对短信的处置权优先分给了系统.我们可以在短信的[设置]→[高级设置]→[系统短信优先]中发现短信的优先处理权默认是分给系统的,只要关 ...
- HTML-Canvas02
文字对齐方式 : 水平对齐 //是用 textAlign 属性设置水平对齐方式(默认坐标点) ctx.textAlign = "start"; ctx.font = "3 ...