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 ...
随机推荐
- codeforces B.Fence 解题报告
题目链接:http://codeforces.com/problemset/problem/363/B 题目意思:给定整数n和k,需要从n个数中找出连续的k个数之和最小,输出这连续的k个数中的第一个数 ...
- Lubuntu下配置Python开发环境
安装完系统必须要做的几件事: 一.更新软件 (如果是通过最新版镜像安装,可无视此步骤) 1.选择速度比较快的源,默认的源速度不一定快.二.配置终端 1.设置终端背景,前景色,透明度 ...
- PO/VO/BO等对象模型
PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录. 2 .在hibernate持久化框架中与i ...
- scp 指定端口
scp -P33033 zp.tar root@111.222.123.01:/da1/web/zhaopin.shouhuobao.com #sshd的端口指定的是33033
- linux dd命令刻录启动U盘详解
dd if=xxx.iso of=/dev/sdb bs=1M 用以上命令前必须卸载u盘,sdb是你的u盘,bs=1M是块的大小,后面的数值大,写的速度相对块一点,但也不是无限的,我一般选2M,注意, ...
- Javascript模块化编程之路——(require.js)
转自:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成&q ...
- Lucene查询索引(分页)
分页查询只需传入每页显示记录数和当前页就可以实现分页查询功能 Lucene分页查询是对搜索返回的结果进行分页,而不是对搜索结果的总数量进行分页,因此我们搜索的时候都是返回前n条记录 package c ...
- CI框架获取post和get参数_CodeIgniter心得
请参考:CI文档的输入类部分: $this->input->post() $this->input->get() ------------------------------- ...
- Ubuntu16.04 安装openjdk-7-jdk
Ubuntu16.04 安装openjdk-7-jdk sudo apt-get install openjdk-7-jre 或者sudo apt-get install openjdk-7-jdk ...
- python 类访问控制
访问限制 我们可以给一个实例绑定很多属性,如果有些属性不希望被外部访问到怎么办? Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问.看例子: ...