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;
}

  

效果:

时间: 2024-10-08 10:29:16

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

【OpenCV学习笔记】一.操作像素

近来给自己开个新坑,打算学习下OpenCV这一计算机视觉库. 参考资料:<OpenCV 2 计算机视觉 编程手册> [以下内容默认版本OpenCV 2.3.1] 最简单的操作莫过于对于一张图片上的像素的遍历了,然而,遍历的方式有很多种,如何取舍很是关键. 简单介绍几种常见的方式: 1.指针遍历: int row = image.rows; int col = image.cols * image.channels(); for(int i = 0; i < row; i++) { uch

opencv学习笔记(01)——操作图像的像素

1 #include <opencv2\core\core.hpp> 2 #include <opencv2\highgui\highgui.hpp> 3 #include <opencv2\imgproc\imgproc.hpp> 4 #include <iostream> 5 6 7 void salt(cv::Mat& image, int n) 8 { 9 10 for(int k=0; k<n; k++) 11 { 12 13 int

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

OpenCV 学习笔记(模板匹配)

OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够高时,就认为找到了我们的目标. 在 OpenCV 中,提供了相应的函数完成这个操作. matchTemplate 函数:在模板和输入图像之间寻找匹配,获得匹配结果图像 minMaxLoc 函数:在给定的矩阵中寻找最大和最小值,并给出它们的位置 在具体介绍这两个函数之前呢,我们还要介绍一个概念,就是如何来评价两

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

http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2013-03-23 17:44 16963人阅读 评论(28) 收藏 举报 分类: 机器视觉(34) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] KAZE系列笔记: OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 OpenCV学习笔记(28)KA

OpenCV学习笔记[5]FLANN特征匹配

OpenCV学习笔记:FLANN特征匹配 本次给出FLANN特征匹配的Java实现. [简介] 特征匹配记录下目标图像与待匹配图像的特征点(KeyPoint),并根据特征点集合构造特征量(descriptor),对这个特征量进行比较.筛选,最终得到一个匹配点的映射集合.我们也可以根据这个集合的大小来衡量两幅图片的匹配程度. 特征匹配与模板匹配不同,由于是计算特征点集合的相关度,转置操作对匹配影响不大,但它容易受到失真.缩放的影响. [特征匹配] FeatureMatching.java: imp

opencv学习笔记(七)SVM+HOG

opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度直方图来构成特征.Hog特征结合SVM分类器已经被广泛用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究院Dalal在2005的CVPR上提出的. 最近在做车标识别相关的研究,用到了SVM+HOG的方法进行识

jQuery学习笔记--JqGrid相关操作 方法列表(上)

1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选中行:$("#jqGrid

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s