【OpenCV】图像金字塔详解及编程实现

图像金字塔被广泛用于各种视觉应用中。图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续降采样获得,直到达到某个中止条件才停止降采样。有两种类型的图像金字塔常常出现在文献和应用中:高斯金字塔和拉普拉斯金字塔。高斯金字塔用来向下降采样图像,而拉普拉斯金字塔则用来从金字塔低层图像中向上采样重建一个图像。

void cvPyrDown( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );
src        -输入图像.
dst        -输出图像, 宽度和高度应是输入图像的一半 ,传入前必须已经完成初始化
filter     -卷积滤波器的类型,目前仅支持 CV_GAUSSIAN_5x5 

函数 cvPyrDown 使用 Gaussian 金字塔分解对输入图像向下采样。首先它对输入图像用指定滤波器进行卷积,然后通过拒绝偶数的行与列来下采样图像。

#include <stdlib.h>
#include <stdio.h>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <vector>
using namespace std;

IplImage* GetPyrDownImage(const IplImage* pSource, int nTime)
{
	// 判断输入参数
	if (pSource == NULL)
	{
		printf("GetPyrDownImage Source Image is NULL:\n");
		return NULL;
	}
	if (nTime < 1)
	{
		printf("func GetPyrDownImage err!\n");
		return NULL;
	}
	CvSize iSourceSize = cvGetSize(pSource);
	CvSize iPyrDownSize = cvSize(iSourceSize.width / 2, iSourceSize.height / 2);

	//中间变量
	IplImage* pPyrDownedImage = cvCreateImage(iPyrDownSize, pSource->depth
		                                                 ,pSource->nChannels);
	cvPyrDown(pSource, pPyrDownedImage, CV_GAUSSIAN_5x5);
	// 结果
	IplImage* pResult;

	if (nTime == 1)
	{
		pResult =  cvCloneImage(pPyrDownedImage);
	}
	else
	{
		pResult = GetPyrDownImage(pPyrDownedImage, --nTime);
	}
	cvReleaseImage(&pPyrDownedImage);
	return pResult;
}

int main()
{
	IplImage *img=cvLoadImage("C:\\Users\\Liu\\Desktop\\bridge.bmp",1);
	IplImage *timg;
	vector<IplImage *> Vimg;
	for (int i=1; i<4; i++)
	{
		timg=GetPyrDownImage(img,i);
		Vimg.push_back(timg);
	}
	 cvNamedWindow("pyramid1", CV_WINDOW_AUTOSIZE );
	 cvNamedWindow("pyramid2", CV_WINDOW_AUTOSIZE );
	 cvNamedWindow("pyramid3", CV_WINDOW_AUTOSIZE );
	for (int j=0; j<3; j++)
	{
		cvShowImage("pyramid1",Vimg[0]);
		cvShowImage("pyramid2",Vimg[1]);
		cvShowImage("pyramid3",Vimg[2]);
	}
	cvWaitKey(0);
	for (int k=0; k<3; k++)
	{
		cvReleaseImage(&Vimg[k]);
	}
	cvReleaseImage(&img);
	cvDestroyWindow("pyramid1");
	cvDestroyWindow("pyramid2");
	cvDestroyWindow("pyramid3");
}

注意参数不一致时,会提示:

Formats of input arguments do not match() int function xx

编程时要注意

时间: 2024-11-11 23:14:13

【OpenCV】图像金字塔详解及编程实现的相关文章

DoG 、Laplacian、图像金字塔详解

DoG(Difference of Gaussian) DoG (Difference of Gaussian)是灰度图像增强和角点检测的方法,其做法较简单,证明较复杂,具体讲解如下: Difference of Gaussian(DOG)是高斯函数的差分.我们已经知道可以通过将图像与高斯函数进行卷积得到一幅图像的低通滤波结果,即去噪过程,这里的Gaussian和高斯低通滤波器的高斯一样,是一个函数,即为正态分布函数. 那么difference of Gaussian 即高斯函数差分是两幅高斯图

KVC/KVO原理详解及编程指南

http://blog.csdn.net/wzzvictory/article/details/9674431 2.KVC/KVO实现原理 键值编码和键值观察是根据isa-swizzling技术来实现的,主要依据runtime的强大动态能力.下面的这段话是引自网上的一篇文章: http://blog.csdn.net/kesalin/article/details/8194240 当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的

[转]OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

[OpenCV入门教程之十三]OpenCV图像金字塔:高斯金字塔.拉普拉斯金字塔与图片尺寸缩放 2014-05-18 18:58 36007人阅读 评论(54) 收藏 举报 本文章已收录于:  OpenCV知识库 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http

【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 这篇文章里,我们将一起探讨图像金字塔的一

KVC/KVO原理详解及编程指南(转载)

KVC/KVO原理详解及编程指南 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模式的一种实现

arcgis中的栅格数据的金字塔详解

1 栅格金字塔定义 金字塔可用于改善性能.它们是原始栅格数据集的缩减采样版本,可包含多个缩减采样图层.金字塔的各个连续图层均以 2:1 的比例进行缩减采样.以下是为栅格数据集创建的两级金字塔示例: 图 1?1金字塔示例 金字塔通过仅检索使用指定分辨率(取决于显示要求)的数据,可以加快栅格数据的显示速度.利用金字塔,可在绘制整个数据集时快速显示较低分辨率的数据副本.而随着放大操作的进行,各个更精细的分辨率等级将逐渐得到绘制;但性能将保持不变,因为您在连续绘制更小的各个区域.数据库服务器会根据用户的

OpenCV图像金字塔

图像金字塔 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样. 原理 Note 以下内容来自于Bradski和Kaehler的大作: Learning OpenCV . 当我们需要将图像转换到另一个尺寸的时候, 有两种可能: 放大 图像 或者 缩小 图像. 尽管OpenCV 几何变换 部分提供了一个真正意义上的图像缩放函数(resize, 在以后的教程中会学到),不过在本篇我们首先学习一下使用 图像金字塔来做图像缩放, 图像金字塔

树莓派的设置及opencv的安装详解

1.树莓派的系统下载网站为:https://www.raspberrypi.org/downloads/raspbian/,其中选择Raspbian Jessie with desktop此版本,另外的mini版功能不是很健全,不推荐. 当然也可以在https://www.raspberrypi.org/downloads/网址下载NOOBS然后选择安装,据说会更简洁. 下载raspbian系统时可以用utorrent种子软件来下载,速度可达2M左右,很节省时间.系统压缩包为1.6G,安装完成占

【OpenCV】图像旋转详解,边缘用黑色填充

项目要用到图像旋转,OpenCV里面居然没有专门封装好的函数,只好自己写了.根据<learnning OpenCV>发现效果不是很理想,旋转后图像大小不变,可是图像却被裁减了. 例子如下: int main( int argc, char** argv ) { IplImage* src=cvLoadImage("C:\\Users\\Liu\\Desktop\\bridge.bmp",1); IplImage* dst = cvCloneImage( src ); int