图像金字塔与resize函数
图像金字塔
将一层层图像比喻成金字塔,层级越高,图像越小,分辨率越低。
高斯金字塔:向下降采样;
拉普拉斯金字塔:向上采样,通过金字塔低层图像重建上层未采样图像;
金字塔的产生
用高斯核对图像进行卷积,然后删除所有偶数行和偶数列,新得到的图形面积为原图像的1/4,循环此过程可得到金字塔;
对图像向下(图像尺寸减半)采样——pyrDown函数;
1、对图像进行高斯核卷积;
2、删除所有偶数行和偶数列;(逐渐丢失信息)
对图像向上(图像尺寸加倍)采样——pyrUp函数;
1、对图像每个方向扩大原来的两倍,新增的行列以0填充;
2、使用高斯内核(*4)与放大后的图像卷积;(逐渐丢失信息)
为了减少信息的丢失,使用拉普拉斯金字塔;
拉普拉斯金字塔通过原图像减去先缩小再放大的图像构成;
API函数Resize
resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) —— 将原始图像调整为指定大小。
scr:原始图像
dsize:输出图像的尺寸(元组方式)
dst:输出图像
fx:沿水平轴缩放的比例因子
fy:沿垂直轴缩放的比例因子
interpolation:插值方法,有以下5种:
cv2.INTER_NEAREST 最近邻插值
cv2.INTER_LINEAR 双线性插值(默认)
cv2.INTER_AREA 使用像素区域关系进行重采样。
cv2.INTER_CUBIC 4x4像素邻域的双3次插值
cv2.INTER_LANCZOS4 8x8像素邻域的Lanczos插值
注:如果要缩小图像,选择:cv2.INTER_AREA;如果要放大图像,建议选择cv2.INTER_LINEAR效果尚可且速度快。进行缩放时, dsize和fx、fy 二选一即可。
程序
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;//全局变量
int k = 5;
Mat dst, dst1, dst2;
//载入原图
Mat src = imread("12.bmp", 1);void on_change(int, void*)
{//resize放缩的两种用法,二选一即可。resize(src, dst, Size(0, 0), (double)k / 10, (double)k / 10, INTER_AREA);//resize(src, src, Size(src.cols / 2, src.rows / 2),(0,0), (0,0), INTER_AREA);imshow("结果图", dst);
}void print()
{cout << "键盘按键【1】:进行resize放缩操作" << endl;cout << "键盘按键【2】:进行pyrUp向上采样操作" << endl;cout << "键盘按键【2】:进行pyrDown向下采样操作" << endl;cout << "键盘按键【Esc】:退出程序" << endl;cout << "注意:放缩值>10为放大,放缩值<10为缩小" << endl;
}int main()
{print();//改变console(控制台)字体颜色 system("color 0B");//判断图片是否读入if (!src.data){printf("读取图片image0错误~! \n");return false;}//循环轮询按键while (1){//先显示原图namedWindow("原图");imshow("原图", src);//获取键盘按键int c = waitKey(0);//判断ESC是否按下,若按下便退出if ((c & 255) == 27){cout << "程序退出!\n";break;}//根据按键的不同,进行各种操作switch ((char)c){case '1':cout << "您正在进行resize放缩操作" << endl;createTrackbar("resize放缩值", "原图", &k, 30, on_change);on_change(k, 0);break;case '2':cout << "您正在进行pyrUp操作" << endl;pyrUp(src, dst1, Size(src.cols * 2, src.rows * 2));imshow("pyrUp图", dst1);break;case '3':cout << "您正在进行pyrDown操作" << endl;pyrDown(src, dst2, Size(src.cols / 2, src.rows / 2));imshow("pyrDown图", dst2);break;}}return 0;
}
图像金字塔与resize函数相关推荐
- CV13 图像分辨率操作(图像金字塔与resize()函数)
文章目录 1.图像金字塔的作用 2.高斯金字塔 2.1理论研究--分辨率缩小 2.2程序分析 2.3效果图 2.4拉普拉斯金字塔 3.图像缩放-resize()函数 3.1resize()函数介绍 3 ...
- OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()
OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize() 一.图像金字塔定义: 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是 ...
- 《OpenCV3编程入门》学习笔记6 图像处理(六)图像金字塔与图片尺寸缩放
6.6 图像金字塔与图片尺寸缩放 6.6.1 图像金字塔 1.图像金字塔是图像中多尺度表达的一种,主要用于图像分割,是一种以多分辨率解释图像的结构,通过梯次向下采样获得分辨率逐步降低的图象集合 2.分 ...
- 滤波、漫水填充、图像金字塔、图像缩放、阈值化
imgpro 组件是 Image 和 Process 这两个单词的缩写组合,即图像处理模块,这个模块包含了如下内容: 文章目录 1.线性滤波:方框滤波.均值滤波.高斯滤波 1.1 平滑处理 1.2 ...
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔总结
我们经常会将某种尺寸的图像转换为其他尺寸的图像,如果放大或者缩小图片的尺寸,笼统来说的话,可以使用OpenCV为我们提供的如下两种方式: <1> resize函数.这是最直接的方式, &l ...
- 我对图像金字塔的理解及OpenCV下的实现代码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像金字塔算法表现出来的效果就是对图像进行缩放嘛 ...
- 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放...
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...
- 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...
- FCN全卷积网络—upsampling(上采样)——OpenCV图像金字塔
一.上采样理论 1.1 bilinear 1.2 Deconvolution(反卷积) 1.3 unpooling 二.OpenCV金字塔:高斯金字塔.拉普拉斯金字塔与图片缩放 一.上采样理论 FCN ...
最新文章
- java 媒体播放器_Java多媒体播放器(三)
- 关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法
- Spring Boot连接多个Redis库配置方案及代码示例
- 8分钟回顾开源巨头 Facebook 的 2016
- 用一个时钟在FPGA中计算直方图
- “油猴”的五大神级脚本
- 最新fl studio20.8中文电音编曲宿主制作软件
- 一张让android死机图片,导致安卓手机死机的照片拍摄者表示这张照片是无意之举...
- 惊喜!轻松将word转换成pdf文档
- 数据结构Data Structure in C++ 胡学钢 全书梳理(备忘自用 已完结)
- BBQ EasyBuns
- Cython使用技巧
- Python 判断无向图是否存在环
- SCI论文投稿前必须检查的29个细节
- 【转】光通信主要会议和期刊总结
- kubeadm init 问题和解决问题记录
- Linux zip分卷压缩
- WORD自动编号的图表标签重新编号
- Makefile中指定目标(MAKECMDGOALS)
- Drupal9笔记之block权限踩坑