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);}
第二种,填入你要缩小或者放大的比率。
#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函数
下采样步骤:
- 对图像进行高斯内核卷积
- 将所有偶数行和列去除
下采样就是图像压缩,会丢失图像信息。
上采样步骤:
- 将图像在每个方向放大为原来的两倍,新增的行和列用0填充;
- 使用先前同样的内核(乘以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精进之路(四):图像处理——图片的缩放和图像金字塔相关推荐
- OpenCV精进之路(二十):工具——图像标注小工具
搞图像深度学习的童鞋一定碰过图像数据标注的东西,当我们训练网络时需要训练集数据,但在网上又没有找到自己想要的数据集,这时候就考虑自己制作自己的数据集了,这时就需要对图像进行标注.图像标注是件很枯燥又很 ...
- OpenCV精进之路(十六):图像分解和融合技术——图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...
- OpenCV精进之路(一):图像处理知识点串烧
opencv图像初始化操作 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp>using na ...
- OpenCV精进之路(九):图像轮廓和图像分割修复——图像修复技术
在实际应用中,我们的图像常常会被噪声腐蚀,这些噪声或是镜头上的灰尘或水滴,或是旧照片的划痕,或者是图像遭到人为的涂画(比如马赛克)或者图像的部分本身已经损坏.如果我们想让这些受到破坏的额图片尽可能恢复 ...
- OpenCV实践之路——雅虎色情图片检测神经网络试用报告
本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/52821497 微博:http ...
- 图像处理(二):图像金字塔
图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效且概念简单的结构.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合. 高斯金字塔是常见的图像金 ...
- OpenCV精进之路(十四):图像矫正技术深入探讨
刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正.哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧! 那什么是图像的矫正呢?举个例子就好明白了. 我的好朋友小明给我拍了这几张 ...
- OpenCV精进之路(二):图像处理——线性滤波和非线性滤波
前言 滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波 线性滤波有方框滤波.均值滤波.高斯滤波三种滤波. (一)方框滤波 ...
- OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
前言 腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域 ...
最新文章
- windows内核中杀任意进程,可杀360!
- c# 添加图片水印,可以指定水印位置+生成缩略图[付上帅图1,2,3,4]
- Django框架是什麼?
- 第二次实验报告(漏)
- git-stash简单用法
- java swing画三角形_如何使用Java Swing编写肮脏的渐变绘制边框
- 密钥库证书的SHA-1指纹
- 6G概念及愿景白皮书
- webqq协议分析之~~~~登陆
- python计算图像面积_利用图像处理计算叶片面积
- 离谱!程序员业余时间开发的项目,版权也属于公司的?
- 基于R语言进行K折交叉验证
- pythonpath环境变量pth_使用pth文件添加Python环境变量方式
- 如何解决Selenium打不开Ie浏览器
- 谷歌浏览器在新页面打开_如何在Google文档中更改页面方向
- mongodb 常用语法
- 全面总结C++类模板使用的基础知识
- 【单片机】电子音乐播放器的设计与制作(说明书)
- 分布式图数据库JanusGraph-简介
- 实体关系抽取几篇论文
热门文章
- Perl 读取特定格式的文件名
- thing php官网,Thinkphp5企业官网,php后台管理框架
- java if 局部变量_java – 为什么局部变量在if-else构造中启动而在if-else-if构造中不启动?...
- 总结新浪friendship接口
- DI使用value属性与value标签的区别以及xml预定义实体引用
- 瑞星2009网络版-服务器端安装和配置
- 程序员高效学习,坚持十年就是大师
- Ubuntu snap 定制内核插件
- linux从前往后读取文件夹图片名称,Linux目录和文件中的常用命令(三)
- ArcGIS Maritime Server 开发教程(四)Maritime Service 开发实践