前言

对图像进行缩放的最简单方法当然是调用resize函数啦!

resize函数可以将源图像精确地转化为指定尺寸的目标图像。

要缩小图像,一般推荐使用CV_INETR_AREA来插值;若要放大图像,推荐使用CV_INTER_LINEAR。

一、缩放调用方式

第一种,规定好你要图片的尺寸,就是填入你要的图片的长和高。

#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>using namespace std;
using namespace cv;//图片的缩小与放大
int main()
{Mat img = imread("lol5.jpg");imshow("原始图", img);Mat dst = Mat::zeros(512, 512, CV_8UC3); //我要转化为512*512大小的resize(img, dst, dst.size());imshow("尺寸调整之后", dst);waitKey(0);}

第二种,填入你要缩小或者放大的比率。

#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>using namespace std;
using namespace cv;//图片的缩小与放大
int main()
{Mat img = imread("lol5.jpg");imshow("原始图", img);Mat dst;resize(img, dst, Size(),0.5,0.5);//我长宽都变为原来的0.5倍imshow("尺寸调整之后", dst);waitKey(0);}

二、图像金字塔

说白了,图像金字塔就是用来进行图像缩放的,干的事情跟resize函数没两样,那我们还需要学它吗?我觉得有必要的额,因为在学习卷积神经网络中会遇到这个名词,所以都学一学吧,搞图形都绕不过他!

说说什么是图像金字塔。

图像金字塔

其实非常好理解,如上图所示,我们将一层层的图像比喻为金字塔,层级越高,则图像尺寸越小,分辨率越低。

两种类型的金字塔:

  • 高斯金字塔:用于下采样,主要的图像金字塔;
  • 拉普拉斯金字塔:用于重建图像,也就是预测残差(我的理解是,因为小图像放大,必须插入一些像素值,那这些像素值是什么才合适呢,那就得进行根据周围像素进行预测),对图像进行最大程度的还原。比如一幅小图像重建为一幅大图像,

图像金字塔有两个高频出现的名词:上采样和下采样。现在说说他们俩。

  • 上采样:就是图片放大(所谓上嘛,就是变大),使用PryUp函数
  • 下采样:就是图片缩小(所谓下嘛,就是变小),使用PryDown函数

下采样步骤:

  1. 对图像进行高斯内核卷积
  2. 将所有偶数行和列去除

下采样就是图像压缩,会丢失图像信息。

上采样步骤:

  1. 将图像在每个方向放大为原来的两倍,新增的行和列用0填充;
  2. 使用先前同样的内核(乘以4)与放大后的图像卷积,获得新增像素的近似值。

上、下采样都存在一个严重的问题,那就是图像变模糊了,因为缩放的过程中发生了信息丢失的问题。要解决这个问题,就得看拉普拉斯金字塔了。

下面给出OpenCV中pryUp和pryDown的用法。

#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>using namespace std;
using namespace cv;//图像金字塔
int main()
{Mat img = imread("lol8.jpg");imshow("原始图", img);Mat dst,dst2;pyrUp(img, dst, Size(img.cols*2, img.rows*2)); //放大一倍pyrDown(img, dst2, Size(img.cols * 0.5, img.rows * 0.5)); //缩小为原来的一半imshow("尺寸放大之后", dst);imshow("尺寸缩小之后", dst2);waitKey(0);}

显然,无论是放大还是缩小,图像都变得模糊了,这就是他的致命缺点。

个人认为,要做缩放就用resize函数吧,毕竟方便太多而且图像不会变模糊!

OpenCV精进之路(四):图像处理——图片的缩放和图像金字塔相关推荐

  1. OpenCV精进之路(二十):工具——图像标注小工具

    搞图像深度学习的童鞋一定碰过图像数据标注的东西,当我们训练网络时需要训练集数据,但在网上又没有找到自己想要的数据集,这时候就考虑自己制作自己的数据集了,这时就需要对图像进行标注.图像标注是件很枯燥又很 ...

  2. OpenCV精进之路(十六):图像分解和融合技术——图像拼接和图像融合技术

    图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...

  3. OpenCV精进之路(一):图像处理知识点串烧

    opencv图像初始化操作 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp>using na ...

  4. OpenCV精进之路(九):图像轮廓和图像分割修复——图像修复技术

    在实际应用中,我们的图像常常会被噪声腐蚀,这些噪声或是镜头上的灰尘或水滴,或是旧照片的划痕,或者是图像遭到人为的涂画(比如马赛克)或者图像的部分本身已经损坏.如果我们想让这些受到破坏的额图片尽可能恢复 ...

  5. OpenCV实践之路——雅虎色情图片检测神经网络试用报告

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/52821497 微博:http ...

  6. 图像处理(二):图像金字塔

    图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效且概念简单的结构.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合. 高斯金字塔是常见的图像金 ...

  7. OpenCV精进之路(十四):图像矫正技术深入探讨

    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正.哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧! 那什么是图像的矫正呢?举个例子就好明白了. 我的好朋友小明给我拍了这几张 ...

  8. OpenCV精进之路(二):图像处理——线性滤波和非线性滤波

    前言 滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波 线性滤波有方框滤波.均值滤波.高斯滤波三种滤波. (一)方框滤波 ...

  9. OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)

    前言 腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域 ...

最新文章

  1. windows内核中杀任意进程,可杀360!
  2. c# 添加图片水印,可以指定水印位置+生成缩略图[付上帅图1,2,3,4]
  3. Django框架是什麼?
  4. 第二次实验报告(漏)
  5. git-stash简单用法
  6. java swing画三角形_如何使用Java Swing编写肮脏的渐变绘制边框
  7. 密钥库证书的SHA-1指纹
  8. 6G概念及愿景白皮书
  9. webqq协议分析之~~~~登陆
  10. python计算图像面积_利用图像处理计算叶片面积
  11. 离谱!程序员业余时间开发的项目,版权也属于公司的?
  12. 基于R语言进行K折交叉验证
  13. pythonpath环境变量pth_使用pth文件添加Python环境变量方式
  14. 如何解决Selenium打不开Ie浏览器
  15. 谷歌浏览器在新页面打开_如何在Google文档中更改页面方向
  16. mongodb 常用语法
  17. 全面总结C++类模板使用的基础知识
  18. 【单片机】电子音乐播放器的设计与制作(说明书)
  19. 分布式图数据库JanusGraph-简介
  20. 实体关系抽取几篇论文

热门文章

  1. Perl 读取特定格式的文件名
  2. thing php官网,Thinkphp5企业官网,php后台管理框架
  3. java if 局部变量_java – 为什么局部变量在if-else构造中启动而在if-else-if构造中不启动?...
  4. 总结新浪friendship接口
  5. DI使用value属性与value标签的区别以及xml预定义实体引用
  6. 瑞星2009网络版-服务器端安装和配置
  7. 程序员高效学习,坚持十年就是大师
  8. Ubuntu snap 定制内核插件
  9. linux从前往后读取文件夹图片名称,Linux目录和文件中的常用命令(三)
  10. ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践