当前位置: 首页 > news >正文

OpenCV探索之路(五):图片缩放和图像金字塔

对图像进行缩放的最简单方法当然是调用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);

}

1093303-20170519093258041-1987030645.png

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

#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);

}

1093303-20170519093314666-122092847.png

接下来说说图像金字塔

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

说说什么是图像金字塔。
1093303-20170519093333385-733867790.png

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

两种类型的金字塔:

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

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

  • 上采样:就是图片放大(所谓上嘛,就是变大),使用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);

}

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

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

转载于:https://www.cnblogs.com/skyfsm/p/6876732.html

相关文章:

  • 99%的人都理解错了HTTP中GET与POST的区别
  • spring的定时任务
  • 利用QPainter绘制散点图
  • 创业经历
  • 黑客入门之单机游戏外挂
  • 如何在本地计算机打开网络文件夹(汇总)
  • 颠倒数组元素顺序reverse()
  • python模块整理
  • 小代码背后的大道理
  • LeetCode 103. Binary Tree Zigzag Level Order Traversal
  • Java Web学习笔记-1
  • MFC exe使用C++ dll中的std::string 崩溃
  • Qt graphic item日记
  • SQL 事务 和 锁 的理解
  • 初识Nginx及其LNMP搭建
  • ES6指北【2】—— 箭头函数
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 11111111
  • AngularJS指令开发(1)——参数详解
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • CSS魔法堂:Absolute Positioning就这个样
  • Druid 在有赞的实践
  • Go 语言编译器的 //go: 详解
  • Java IO学习笔记一
  • java正则表式的使用
  • 动态魔术使用DBMS_SQL
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 数据结构java版之冒泡排序及优化
  • 我这样减少了26.5M Java内存!
  • 一起参Ember.js讨论、问答社区。
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​业务双活的数据切换思路设计(下)
  • # Apache SeaTunnel 究竟是什么?
  • #git 撤消对文件的更改
  • #if和#ifdef区别
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (五)网络优化与超参数选择--九五小庞
  • .net wcf memory gates checking failed
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 事件模型教程(二)
  • .net分布式压力测试工具(Beetle.DT)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET框架
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .Net中的设计模式——Factory Method模式
  • .skip() 和 .only() 的使用
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [20181219]script使用小技巧.txt