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

十三、OpenCV中的图像的向上采样和向下采样

文章目录

    • 一、基本概念
    • 二、OpenCV 提供的函数
    • 三、示例代码
    • 四、扩展:图像金字塔构建示例
    • 五、实时摄像头金字塔采样演示

一、基本概念

  在 OpenCV 中,图像的向上采样(Upsampling) 和 向下采样(Downsampling) 是常用的图像金字塔(Pyramid)操作,主要用于多分辨率处理(例如目标检测、图像金字塔匹配、金字塔融合等)。

在这里插入图片描述

二、OpenCV 提供的函数

OpenCV 提供了两种专用的函数:

pyrUp()    // 向上采样(放大)
pyrDown()  // 向下采样(缩小)

它们都属于 图像金字塔(Image Pyramid) 操作,会在采样前后自动进行高斯滤波以减少混叠(aliasing)。

函数参数说明:

pyrUp(InputArray src, OutputArray dst, const Size& dstsize = Size(), int borderType = BORDER_DEFAULT);
pyrDown(InputArray src, OutputArray dst, const Size& dstsize = Size(), int borderType = BORDER_DEFAULT);

在这里插入图片描述

与 resize() 的区别:
在这里插入图片描述

  • 如果只是要简单缩放(例如 1.3×、0.75×),推荐用 resize();
  • 如果要做图像金字塔(层层上下采样),推荐用 pyrUp/pyrDown。

三、示例代码

向下采样(pyrDown):

#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat src = imread("test.jpg");if (src.empty()) return -1;Mat dst;pyrDown(src, dst);  // 图像缩小一半imshow("Original", src);imshow("Downsampled", dst);waitKey(0);return 0;
}

输出图像尺寸约为原图的一半。

向上采样(pyrUp):

#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat src = imread("test.jpg");if (src.empty()) return -1;Mat dst;pyrUp(src, dst);  // 图像放大一倍imshow("Original", src);imshow("Upsampled", dst);waitKey(0);return 0;
}

输出图像尺寸约为原图的两倍。

四、扩展:图像金字塔构建示例

#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat src = imread("test.jpg");if (src.empty()) return -1;Mat pyr1, pyr2;pyrDown(src, pyr1);pyrDown(pyr1, pyr2);imshow("Level 0", src);imshow("Level 1", pyr1);imshow("Level 2", pyr2);waitKey(0);return 0;
}

五、实时摄像头金字塔采样演示

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;// 全局变量
int downLevel = 0; // 向下采样层数
int upLevel = 0;   // 向上采样层数// 回调函数(当滑动条调整时被调用)
void onChange(int, void*) {// 不需要实现逻辑,主循环中会读取值
}int main() {VideoCapture cap(0); // 打开默认摄像头if (!cap.isOpened()) {cout << "无法打开摄像头!" << endl;return -1;}namedWindow("Pyramid Demo", WINDOW_AUTOSIZE);// 创建滑动条,控制采样层数createTrackbar("Down Level", "Pyramid Demo", &downLevel, 3, onChange);createTrackbar("Up Level", "Pyramid Demo", &upLevel, 3, onChange);while (true) {Mat frame;cap >> frame;if (frame.empty()) break;Mat result = frame.clone();// 向下采样for (int i = 0; i < downLevel; ++i) {pyrDown(result, result);}// 向上采样for (int i = 0; i < upLevel; ++i) {pyrUp(result, result);}// 拼接原图和结果显示Mat show;resize(frame, frame, Size(640, 480));resize(result, result, Size(640, 480));hconcat(frame, result, show);putText(show, "Left: Original | Right: Pyramid Result",Point(20, 30), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 255, 0), 2);imshow("Pyramid Demo", show);char c = (char)waitKey(30);if (c == 27 || c == 'q' || c == 'Q') break; // 按 ESC 或 Q 退出}cap.release();destroyAllWindows();return 0;
}
http://www.dtcms.com/a/478246.html

相关文章:

  • 一份面向研究人员的强化学习对齐指南:为自定义语言模型实施与评估 PPO 和 DPO
  • 石家庄网站seo网页设计与制作课程定位
  • Python全栈(基础篇)——Day10:后端内容(map+reduce+filter+sorted+实战演示+每日一题)
  • Datawhale OpenAI官方智能体框架202510
  • 25软件测试工作量估算
  • 网站页脚版权信息在线html编辑
  • 计算机视觉:卷积神经网络(CNN)图像分类从像素与色彩通道基础到特征提取、池化及预测
  • C# 串口通信完整教程 (.NET Framework 4.0)
  • GNN是和RNN一样的吗?多次循环,但是更新的是同一批参数?
  • Ubuntu 24.04 安装 Jenkins
  • 手游做网站推广应该怎么做photoshop做网站
  • 成都专业的整站优化公司起名字免费软件
  • 【threejs】webgl使用effectComposer时的抗锯齿
  • 大语言模型(LLM)领域细分方向解析
  • 简要说明开发网站的步骤谷歌搜索引擎363
  • Spotify(正版流媒体音乐平台) 多语便携版
  • 告别复制粘贴!自动化处理文本空行的新思路
  • 基于「多模态大模型 + BGE向量检索增强RAG」的新能源汽车故障诊断智能问答系统(vue+flask+AI算法)
  • 实战|京东 jd.union.open.goods.search 接口:精准检索与 2025 商业机会挖掘
  • 从零上手 Rokid JSAR:打造专属 AR 桌面交互式 3D魔方,开启空间开发之旅
  • 番禺人才网招聘信恿南昌seo数据监控
  • 自动驾驶强化学习的价值对齐:奖励函数设计的艺术与科学
  • xml 方式声明式事务案例
  • 蓝海国际版网站建设贵阳制作网站
  • MATLAB代码实现了一个双层多尺度动态图卷积网络(DGCN)用于城市交通流量预测,核心功能为模拟生成城市道路网络的交通流量时序数据
  • 计算机课程《机器学习》导论
  • OpenStack Neutron 中的核心概念:Network、Subnet 和 Port
  • JVM(十)-- 类的加载器
  • 软考刷题--数据库
  • 重庆建网站公司做网站的等级保护要多少钱