OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()

OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()

一、图像金字塔定义:

图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。
金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

两种类型的图像金字塔:

1、高斯金字塔(Gaussianpyramid)——主要的图像金字塔,用来向下降采样图像,图像缩小,丢失信息。
高斯金字塔是通过高斯平滑和亚采样获得一些列下采样图像:
1)对图像G_i进行高斯内核卷积;
2)将所有偶数行和列去除;
3)pyrUp函数:对图像向上采样,图像尺寸加倍(执行高斯金字塔的向上采样操作,其实它也可以用于拉普拉斯金字塔)
4)pyrDown函数:对图像向下采样,图像尺寸减半(执行了高斯金字塔建造的向下采样操作)

2、拉普拉斯金字塔(Laplacianpyramid)——向上采样重建一个图像,图像放大,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原。
如果想放大图像,则需要通过向上取样操作得到:
1)将图像在每个方向扩大为原来的两倍,新增的行和列以0填充
2)使用先前同样的内核(乘以4)与放大后的图像卷积,获得 “新增像素”的近似值

一、图像缩放resize( )函数:

此函数将源图像精确地转换为指定尺寸的目标图像。

void resize(InputArray src,	// 输入图像
OutputArray dst, 			// 输出图像
Size dsize, 				// 输出图像的大小,如果它等于零,自动计算
double fx=0, 				// 沿水平轴的缩放系数
double fy=0,				// 沿垂直轴的缩放系数
int interpolation=INTER_LINEAR 	// 用于指定插值方式
)
INTER_NEAREST - 最近邻插值
INTER_LINEAR - 线性插值(默认值)
INTER_AREA - 区域插值(利用像素区域关系的重采样插值)(缩小图像推荐)
INTER_CUBIC –三次样条插值(超过4×4像素邻域内的双三次插值)
INTER_LANCZOS4 -Lanczos插值(超过8×8像素邻域的Lanczos插值)

示例代码:

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;#define WINDOW_NAME "【程序窗口】"		//为窗口标题定义的宏
Mat g_srcImage, g_dstImage, g_tmpImage;int main()
{//显示帮助文字ShowHelpText();//载入原图//工程目录下需要有一张名为1.jpg的测试图像,且其尺寸需被2的N次方整除,N为可以缩放的次数g_srcImage = imread("F:/C++/2. OPENCV 3.1.0/6.6 pyrUp_pyrDown 图像金字塔/2.jpg");if( !g_srcImage.data ){printf("Oh,no,读取srcImage错误~! \n");return false;}else{printf("读入图像尺寸:Width*Height=%d*%d  \n",g_srcImage.cols,g_srcImage.rows);}// 创建显示窗口namedWindow( WINDOW_NAME, WINDOW_AUTOSIZE );imshow(WINDOW_NAME, g_srcImage);//参数赋值g_tmpImage = g_srcImage;g_dstImage = g_tmpImage;int key =0;//轮询获取按键信息while(1){key=waitKey(9) ;//读取键值到key变量中//根据key变量的值,进行不同的操作switch(key){case 27://按键ESCcase 'q'://按键Qreturn 0;break;// 图片放大case 'a'://按键A按下,调用pyrUp函数case '3':pyrUp( g_tmpImage, g_dstImage, Size( g_tmpImage.cols*2, g_tmpImage.rows*2 ) );printf( ">检测到按键【A】/【3】被按下,开始进行基于【pyrUp】函数的图片放大:图片尺寸×2 \n" );break;case 'w'://按键W按下,调用resize函数case '1':resize(g_tmpImage,g_dstImage,Size( g_tmpImage.cols*2, g_tmpImage.rows*2 ));printf( ">检测到按键【W】/【1】被按下,开始进行基于【resize】函数的图片放大:图片尺寸×2 \n" );break;//图片缩小case 'd': //按键D按下,调用pyrDown函数case '4': //按键4按下,调用pyrDown函数pyrDown( g_tmpImage, g_dstImage, Size( g_tmpImage.cols/2, g_tmpImage.rows/2 ));printf( ">检测到按键【D】/【4】被按下,开始进行基于【pyrDown】函数的图片缩小:图片尺寸/2\n" );break;case  's': //按键S按下,调用resize函数case  '2'://按键2按下,调用resize函数resize(g_tmpImage,g_dstImage,Size( g_tmpImage.cols/2, g_tmpImage.rows/2 ));printf( ">检测到按键【S】/【2】被按下,开始进行基于【resize】函数的图片缩小:图片尺寸/2\n" );break;}//经过操作后,显示变化后的图imshow( WINDOW_NAME, g_dstImage );//将g_dstImage赋给g_tmpImage,方便下一次循环g_tmpImage = g_dstImage;}
}

输出一些帮助信息

static void ShowHelpText()
{printf("\n\t欢迎来到OpenCV图像金字塔和resize示例程序~\n\n");printf( "\n\n\t按键操作说明: \n\n""\t\t键盘按键【ESC】或者【Q】- 退出程序\n""\t\t键盘按键【1】或者【W】- 进行基于【resize】函数的图片放大\n""\t\t键盘按键【2】或者【S】- 进行基于【resize】函数的图片缩小\n""\t\t键盘按键【3】或者【A】- 进行基于【pyrUp】函数的图片放大\n""\t\t键盘按键【4】或者【D】- 进行基于【pyrDown】函数的图片缩小\n");
}

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

量子纠缠和宇宙黑洞

2019年7月&#xff0c;量子纠缠&#xff08;两个光子&#xff09;照片首次公布2019年4月&#xff0c;宇宙黑洞&#xff08;质量为太阳的65亿倍&#xff09;照片首次公布来源&#xff1a;吴志刚科学网博客量子纠缠和宇宙黑洞&#xff0c;一个极小&#xff0c;一个极大&#xff0…

这些重大科技领域问题,听听专家怎么说

来源&#xff1a;科技日报从前不久结束的全英华人教授协会年会上了解到&#xff0c;目前人类面临的许多问题都可以通过扎实的科研创新和精准的技术应用予以解决&#xff1b;新的技术领域的出现&#xff0c;不代表传统技术方法都要丢弃&#xff1b;尽管摆在广大科技从业者面前的…

plt.fill_between用法

plt.fill_between用颜色填充两条曲线之间的区域plt.fill_between(x, y1, y2)&#xff0c;其中x是横坐标&#xff0c;y1和y2是两条曲线&#xff0c;这个函数的作用是用颜色填充y1和y2这两条曲线之间的区域。 该函数最常用的用法是已知均值曲线和标准差&#xff0c;画出标准差覆…

QT+OpenCV综合示例:载入、读取图片

QTOpenCV综合示例&#xff1a;载入、读取图片1、代码&#xff1a;2、运行结果&#xff1a;下载1 GitHub: 下载2 1、代码&#xff1a; 1&#xff09;opencv_imwrite_Q.pro 添加&#xff1a; INCLUDEPATH D:\opencv-3.1.0\opencv\build\includewin32:CONFIG(release, debug|re…

“算法战:DARPA下一代人工智能计划初见成效” 背景分析与初步研判

2018年9月&#xff0c;美国国防高级研究计划局&#xff08;DARPA&#xff09;宣布将出资20亿美元,用于开发新的人工智能技术。近日&#xff0c;DARPA副局长彼得海纳姆在华盛顿接受记者采访时说&#xff0c;DARPA的“下一代人工智能”&#xff08;AI Next&#xff09;计划在实施…

OpenCV学习笔记(十一):阈值化:threshold(),adaptivethreshold()

OpenCV学习笔记&#xff08;十一&#xff09;&#xff1a;阈值化&#xff1a;threshold(),adaptivethreshold() 一、定义&#xff1a; 1&#xff09;固定阈值操作 double threshold( InputArray src, // 输入图像&#xff0c;单通道 OutputArray dst, // 输出图像 double…

北京邮电大学刘伟教授:人机融合与混合智能的新应用场景

前言&#xff1a;本文是北京邮电大学人机交互与认知工程实验室主任、科技委人机融合智能组首席科学家刘伟教授就混合智能的产生、起源和新应用场景所做的深度阐述。第一部分是刘伟老师从新书《崛起的超级智能&#xff1a;互联网大脑如何影响科技未来》延伸的关于人机融合的思考…

VC++6.0怎么打开工程

点击文件→打开&#xff0c;选择工程所在文件夹&#xff0c;选择后缀名为dsp的文件打开即可。 若直接选择cpp后缀名打开&#xff0c;打开的只是cpp文件&#xff0c;而不是工程&#xff0c;此时VC右侧不会显示工程信息。

问题解决:QtCreator屏蔽指定警告:如C4819等

QT creator 频繁报出 &#xff0c;不好解决的错误如&#xff1a; warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 方法一&#xff1a;&#xff08;屏蔽此警告&#xff09; 在工程文件.pro里面添加 # disable C…

解析|2G~5G与未来天线技术!

来源&#xff1a;电子万花筒过去二十年&#xff0c;我们见证了移动通信从1G到4G LTE的转变。在这期间&#xff0c;通信的关键技术在发生变化&#xff0c;处理的信息量成倍增长。而天线&#xff0c;是实现这一跨越式提升不可或缺的组件。按照业界的定义&#xff0c;天线是一种变…

QT+OpenCV综合示例:图像混合(滑动条)

QTOpenCV综合示例&#xff1a;图像混合&#xff08;滑动条&#xff09;1、代码&#xff1a;2、运行结果&#xff1a;0&#xff09;Widget_op.ui &#xff08;界面文件&#xff09;设计&#xff1a; 1、代码&#xff1a; 1&#xff09;opencv_imwrite_Q.pro 添加&#xff1a;…

图说报告|智能技术群的“核聚变”推动智能+时代到来

来源&#xff1a;阿里研究院2019年政府工作报告正式提出了“智能”重要战略。5G、物联网、人工智能、数字孪生、云计算、边缘计算等智能技术群的融合与叠加就像“核聚变”&#xff0c;推动着万物互联迈向万物智能时代&#xff0c;进而带动了“智能”时代的到来&#xff0c;以智…

C++局部变量和全局变量的初始化

当局部变量被定义时&#xff0c;系统不会对其初始化&#xff0c;此时局部变量的初始值未定义&#xff0c;必须自行对其初始化。定义全局变量时&#xff0c;系统会自动初始化为下列值&#xff1a;

OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器

OpenCV学习笔记&#xff08;十二&#xff09;&#xff1a;边缘检测&#xff1a;Canny(),Sobel(),Laplace(),Scharr滤波器 1&#xff09;滤波&#xff1a;边缘检测的算法主要是基于图像强度的一阶和二阶导数&#xff0c;但导数通常对噪声很敏感&#xff0c;因此必须采用滤波器来…

微软转型里程碑:云计算收入首次超过Windows业务

来源&#xff1a;腾讯科技导语 微软云计算业务第二季度收入为114亿美元&#xff0c;实现了64%的营收增长&#xff0c;上年同期和上一季度的增幅分别为89%和73%。腾讯科技讯 据国外媒体报道&#xff0c;微软公司今日公布了二季度财报&#xff08;自然季度&#xff0c;下同&#…

OpenCV学习笔记(十三):霍夫变换:HoughLines(),HoughLinesP(),HoughCircles( )

OpenCV学习笔记&#xff08;十三&#xff09;&#xff1a;霍夫变换&#xff1a;HoughLines(),HoughLinesP(),HoughCircles( ) 1、霍夫线变换HoughLines() OpenCV支持三种不同的霍夫线变换&#xff0c;它们分别是&#xff1a; 1&#xff09;标准霍夫变换(Standard Hough Trans…

“如果没有IBM和其所提供的系统,我们就无法登上月球。”

来源&#xff1a;IBM中国“如果没有IBM和其所提供的系统&#xff0c;我们就无法登上月球。”——NASA飞行指挥官 Gena Kra1969年7月20日&#xff0c;就在距离阿姆斯特朗迈出“人类一大步”约122米的月球上空&#xff0c;登月舱里突然响起了刺耳的警报声。警报向NASA显示机载电脑…

C++有符号和无符号数的转换

本文转自&#xff1a;http://www.94cto.com/index/Article/content/id/59973.html 1.引例&#xff1a; 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题&#xff0c;被它们之间的转换原理和位移原理搞得头大了。真的很后悔本科的时候没有认真学习《计算机组成…

OpenCV学习笔记(十四):重映射:remap( )

OpenCV学习笔记&#xff08;十四&#xff09;&#xff1a;重映射&#xff1a;remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系&#xff0c;这种映射关系有两种&#xff0c;一种是计算原图像任意像素在映射后图像的坐标位置&#xff0c;另一种是计算变换后…