09- OpenCV:图像上采样和降采样

目录

1、上采样和降采样 简介

2、采样的应用场景

3、采样的API

4、图像金字塔概念

5、代码演示


1、上采样和降采样 简介

在图像处理中,上采样(Upsampling)和降采样(Downsampling)是常用的操作。

(1)上采样(Upsampling)

        上采样是将图像的分辨率增加的过程,通常使用插值方法来填充新生成的像素。OpenCV中常用的上采样函数是cv::resize,可以通过指定目标图像的尺寸来实现上采样。

(2)降采样(Downsampling)

        降采样(Downsampling): 降采样是将图像的分辨率减小的过程,通常是通过删除或合并像素来实现。OpenCV中常用的降采样函数是cv::pyrDown,可以将图像尺寸减小一半

2、采样的应用场景

采样主要用于改变图像的分辨率;

(1)图像缩放:上采样和降采样可以用于调整图像的尺寸,实现图像的放大或缩小操作。上采样可以增加图像的分辨率,降采样可以减小图像的分辨率。

(2)图像金字塔:上采样和降采样是构建图像金字塔的基础操作。图像金字塔可以用于多尺度图像处理,如图像融合、图像特征提取、图像分割等。

(3)目标检测与识别:在目标检测和识别任务中,通常需要对输入图像进行预处理。上采样和降采样可以用于将输入图像调整到模型要求的尺寸,以便进行后续的处理和分析。

(4)图像压缩:在图像压缩算法中,降采样被广泛应用。通过降低图像的分辨率,可以减少图像数据的量,从而实现图像的压缩。

(5)图像重建:在图像重建任务中,上采样可以用于恢复图像的细节信息。通过上采样操作,可以将低分辨率的图像重建为高分辨率的图像。

(6)图像处理滤波:在一些图像处理滤波算法中,如模糊滤波、锐化滤波等,通常需要对图像进行上采样或降采样操作,以便更好地处理图像的细节和特征。

这些只是上采样和降采样的一些常见应用场景,实际上还有很多其他领域和任务也会使用到这两种操作。根据具体的需求和任务,选择合适的上采样和降采样方法非常重要。

3、采样的API

(1)上采样(cv::pyrUp) – zoom in 放大

pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)) 生成的图像是原图在宽与高各放大两倍

// 函数原型

cv::pyrUp(

InputArray src, // 输入图像

OutputArray dst, // 输出图像,尺寸为原图像的2倍

const Size& dstsize = Size(), // 目标图像的尺寸,默认为空,表示根据原图像计算得出

int borderType = BORDER_DEFAULT // 边界类型,默认为BORDER_DEFAULT

)

(2)降采样 (cv::pyrDown) – zoom out 缩小

pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2)) 生成的图像是原图在宽与高各缩小1/2

// 函数原型

cv::pyrDown(

InputArray src, // 输入图像

OutputArray dst, // 输出图像,尺寸为原图像的一半

const Size& dstsize = Size(), // 目标图像的尺寸,默认为空,表示根据原图像计算得出

int borderType = BORDER_DEFAULT // 边界类型,默认为BORDER_DEFAULT

)
 

4、图像金字塔概念

(1)我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔

        一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。

从图看得出来:

        — 分辨率往下越来越高,叫“上采样”,得到一个更高分辨率的图像。

        —分辨率往上越来越低,叫“降采样”,得到一个更低分辨率的图像。

(2)认识2个重要的概念:

— 高斯金子塔 – 用来对图像进行降采样

— 拉普拉斯金字塔:用来重建一张图片根据它的上层降采样图片

(3)图像金字塔概念 – 高斯金字塔

        1)高斯金子塔是从底向上,逐层降采样得到。

        2)降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。

        3)高斯金子塔的生成过程分为两步:    

- 对当前层进行高斯模糊      

- 删除当前层的偶数行与列     

即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。

(4)高斯不同(Difference of Gaussian-DOG)

        1)定义:就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像。称为高斯不同(DOG)

        2)高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。

5、代码演示
#include <opencv2/opencv.hpp>
#include <iostream>
#include "math.h"

using namespace cv;
int main(int agrc, char** argv) {
	Mat src, dst;
	src = imread("test.jpg");
	if (!src.data) {
		printf("could not load image...");
		return -1;
	}

	char INPUT_WIN[] = "input image";
	char OUTPUT_WIN[] = "sample up";
	namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, src);

	// 上采样
	pyrUp(src, dst, Size(src.cols*2, src.rows * 2));
	imshow(OUTPUT_WIN, dst);

	// 降采样
	Mat s_down;
	pyrDown(src, s_down, Size(src.cols / 2, src.rows / 2));
	imshow("sample down", s_down);

	// DOG
	Mat gray_src, g1, g2, dogImg;
	cvtColor(src, gray_src, CV_BGR2GRAY);
	GaussianBlur(gray_src, g1, Size(5, 5), 0, 0);
	GaussianBlur(g1, g2, Size(5, 5), 0, 0);
	subtract(g1, g2, dogImg, Mat());

	// 归一化显示
	normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);
	imshow("DOG Image", dogImg);

	waitKey(0);
	return 0;
}

效果展示:(左边是高斯金字塔,右边是高斯不同DOG)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React函数式组件学习笔记

React是一种用于构建用户界面的JavaScript库&#xff0c;它采用组件化的方式来构建复杂的UI。在React中&#xff0c;函数式组件是一种声明式的方式去描述UI的状态和行为。 React的特性 1.声明式设计-React采用声明范式&#xff0c;可以轻松描述应用 2.高效-React通过对DOM的模…

若依顶部导航栏改造

若依顶部导航栏改造 1.改造后代码 需要代码的请私聊我&#xff01; 目前的话就是三级目录&#xff0c;太多了也没啥用&#xff01;

鸿蒙入门实战-ArkTS开发

声明式UI基本概念 应用界面是由一个个页面组成&#xff0c;ArkTS是由ArkUI框架提供&#xff0c;用于以声明式开发范式开发界面的语言。 声明式UI构建页面的过程&#xff0c;其实是组合组件的过程&#xff0c;声明式UI的思想&#xff0c;主要体现在两个方面&#xff1a; 描述…

ZooKeeper 安装

ZooKeeper 的安装包括单机模式安装&#xff0c;以及集群模式安装。 单机模式较简单&#xff0c;是指只部署一个 zk 进程&#xff0c;客户端直接与该 zk 进程进行通信。在开发测试环境下&#xff0c;通常来说没有较多的物理资源&#xff0c;因此我们常使用单机模式。 当然在单…

NXP采用RS RTS测试系统,验证28纳米RFCMOS雷达单芯片 |百能云芯

Rohde & Schwarz的雷达目标模拟器R&S RTS&#xff0c;作为汽车雷达的颠覆性解决方案&#xff0c;尤其是其能够电子模拟非常近距离物体的能力&#xff0c;已被用于验证NXP半导体的下一代雷达传感器参考设计的性能。 这一合作使汽车行业在汽车雷达的发展上迈出了一步&…

参加数据库活动,学习知识,领取奖品

去年12月1日我发了一篇关于数据库高可用的文章《我们的数据库需要什么样的HA&#xff1f;》&#xff0c;文中介绍了阿里云PolarDB MySQL通过了热备无感秒切技术&#xff0c;解决了HA场景下的故障探测、切换速度和切换体验的问题。文末提到了线上的PolarDB功能体验馆&#xff0c…

结构化流的介绍

目录 有界数据和无界数据 有界数据 无界数据 结构化流 基本介绍 入门案例 结构化流的编程模型 数据结构 数据源(Source) File Source Kafka Source(Spark 和 Kafka 整合) 整合Kafka准备工作 从kafka中读取数据 流式处理 批处理 数据写入Kafka中 流式处理 批处理…

Hadoop——HDFS、MapReduce、Yarn期末复习版(搭配尚硅谷视频速通)

一、HDFS 1.HDFS概述 1.1 HDFS定义 HDFS(Hadoop Distributed File System),它是一个文件系统&#xff0c;用于存储文件&#xff0c;通过目录树来定位文件&#xff1b;其次&#xff0c;它是分布式的&#xff0c;由很多服务器联合起来实现其功能&#xff0c;集群中的服务器有各自…

conda环境下FutureWarning: Pass sr=16000, n_fft=800 as keyword args问题解决

1 问题描述 在训练语音处理模型过程中&#xff0c;出现如下错误&#xff1a; audio.py:100: FutureWarning: Pass sr16000, n_fft800 as keyword args. From version 0.10 passing these as positional arguments will result in an errorreturn librosa.filters.mel(hp.samp…

Docker之网络配置的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Docker之网络配置的使用》。&#x1f3af;&…

芯品荟|电梯外呼面板屏驱市场调研报告

PART ONE 产品简介 - Introduction - 1.电梯外呼面板介绍 电梯外呼面板&#xff0c;用于显示电梯当前位置、运行状态和楼层信息&#xff0c;以便乘客在等待电梯时了解电梯的运行情况。 电梯外呼面板&#xff0c;按显示屏的种类&#xff0c;分为3类&#xff0c;分别是LED屏、L…

游戏开发,中小公司跳槽去大厂容易还是考研应届生校招容易?

游戏开发&#xff0c;中小公司跳槽去大厂容易还是考研应届生校招容易&#xff1f; 在之前的文章中&#xff0c;我们提到过&#xff0c;游戏开发行业首选直接进入游戏大厂。《开发者必读&#xff1a;如何选择适合的游戏开发公司&#xff1f;》因为大厂不仅能提供良好的职业发展…

记录汇川:H5U与Factory IO测试14

现实53工位的物料运输。 设置了自动连续存启动&#xff1a;就是一个一个运&#xff0c;按照顺序将空的货架填满。 设置了自动连续存停止&#xff1a;就是完成当前循环后退出。 设置了自动连续取启动&#xff1a;就是一个一个运&#xff0c;按照顺序将有货的货架清空。 设置…

js:使用canvas画一个半圆

背景 需求需要画一个半圆&#xff0c;或者多半圆&#xff0c;其实一下子就能想到 canvas 中的圆弧&#xff0c;核心使用 context.arc context.arc(x,y,r,sAngle,eAngle,counterclockwise)接下来我们看看示例 例一 <!DOCTYPE html> <html lang"en"> &…

SpringBoot集成p6spy

P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。这里主要用于在控制台打印SQL时能自动将问号替换成实际参数打印一个可执行的SQL…

将 pyparamvalidate 项目,发布至 pypi

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、编写 pyproject.toml 文件3、编写 LICENSE 文件4、编写 README.md 文件5、升级 pip、build、twine 工具6、打包发布的版本7、测试发布至 TestPyPI8、创建测试项目&#xff0c;测试发布结果9、正…

成功解决VScode进入到内置函数中调试

主要有两个关键步骤&#xff0c; 第一步 将launch.json中的"justMyCode"设为false 可通过使用ctrlshiftP搜索lauch.json找到次文件 如果找不到的话&#xff0c;可点击debug按钮&#xff0c;然后找到点击create a launch.json file创建 创建得到的launch.json如下&am…

直接win+r打开命令控制台安装element-ui 与 在项目目录下安装element-ui的区别是什么?

使用Windows运行命令&#xff08;WinR&#xff09;打开命令控制台&#xff08;通常指的是cmd或PowerShell&#xff09;并安装element-ui与在项目目录下打开命令控制台进行安装的主要区别在于当前工作目录的不同。 直接WinR打开命令控制台安装element-ui&#xff1a;这种方式下…

On the User Behavior Leakage from Recommender System Exposure

ACM TOIS 2023 代码链接 系统暴露&#xff1a;用户的当前推荐项目列表。 对推荐系统进行攻击也就是说根据用户当前推荐项目列表输出用户的历史行为。 论文试图解决什么问题&#xff1f; 本文试图解决的问题是&#xff1a;在推荐系统中&#xff0c;用户历史行为隐私是否可以从…

mysql配置(各种配置参数详解)

mysql配置文件 在MySQL中&#xff0c;常用的配置包括&#xff1a; 数据库服务器配置 bind-address&#xff1a;指定MySQL服务器绑定的IP地址&#xff0c;默认为0.0.0.0&#xff08;所有可用IP&#xff09;。port&#xff1a;指定MySQL服务器监听的端口号&#xff0c;默认为330…