OpenCV图像拼接(5)构建图像的拉普拉斯金字塔 (Laplacian Pyramid)

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::detail::createLaplacePyr 是 OpenCV 中的一个函数,用于构建图像的拉普拉斯金字塔 (Laplacian Pyramid)。拉普拉斯金字塔是一种多尺度图像表示方法,通常用于图像融合、图像压缩和其他多分辨率分析任务。

函数原型

void cv::detail::createLaplacePyr
(InputArray img, int num_levels, std::vector<UMat>& pyr
);

参数

  • img (InputArray)

    输入图像。可以是单通道或三通道图像(灰度图或彩色图)。
    类型:cv::Mat 或 cv::UMat。
    注意:输入图像必须是 8 位无符号整数类型(CV_8U)。

  • num_levels (int)

    拉普拉斯金字塔的层数。
    表示金字塔的分解层数,通常与图像的尺寸有关。
    例如,如果图像的宽度和高度为 W×HW×H,则金字塔的最大层数受限于 min⁡(log⁡2(W),log⁡2(H))min(log2​(W),log2​(H))。

  • pyr (std::vector&)

    输出的拉普拉斯金字塔。
    这是一个向量,存储每一层的拉普拉斯金字塔图像。
    向量的大小等于 num_levels + 1,因为最后一层通常包含原始图像的最低分辨率版本。

功能描述

拉普拉斯金字塔是通过对高斯金字塔进行差分计算得到的。具体步骤如下:

  • 首先,构建高斯金字塔(Gaussian Pyramid),即通过对图像进行多次下采样(缩小)得到一系列逐渐缩小的图像。
  • 然后,对高斯金字塔的每一层进行上采样(放大)并减去上一层的高斯图像,得到拉普拉斯金字塔的每一层。
  • 最终结果是一个包含多个分辨率层次的拉普拉斯金字塔。

拉普拉斯金字塔的特点是:

  • 每一层图像包含的是图像在不同尺度上的细节信息。
  • 最底层通常是原始图像的最低分辨率版本。

代码示例

#include <opencv2/core/cuda.hpp>
#include <opencv2/opencv.hpp>
#include <vector>int main()
{// 读取输入图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png", cv::IMREAD_COLOR );if ( img.empty() ){std::cerr << "Error: Could not load image!" << std::endl;return -1;}// 定义拉普拉斯金字塔的层数int num_levels = 4;// 存储拉普拉斯金字塔的向量std::vector< cv::UMat > laplacian_pyramid;// 创建拉普拉斯金字塔cv::detail::createLaplacePyr( img, num_levels, laplacian_pyramid );// 显示金字塔的每一层for ( int i = 0; i < laplacian_pyramid.size(); ++i ){// 将 UMat 转换为 Matcv::Mat level = laplacian_pyramid[ i ].getMat( cv::ACCESS_READ );cv::Mat result_8u;level.convertTo( result_8u, CV_8U );  // 转换为 8 位无符号整型‌:ml-citation{ref="3,8" data="citationList"}cv::imshow( "Laplacian Pyramid Level " + std::to_string( i ), result_8u );}cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++题目

1、内存管理 1.内存模型 栈:在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。 堆&#xff1a;就是那些由new分配的内存块&#xff0c;其释放由程序员控制&#xff08;一个new对应一个delete&#xff09…

vscode终端不识别npm 无法解析npm

vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑&#xff0c;寻思安装各种环境&#xff0c;一顿操作猛如虎&#xff0c;当最后一个打开vscode后&#xff0c;运行项目发现&#xff0c;新建终端>npm run dev 无法识别。 在cmd 中 打node -…

解决 Element UI 嵌套弹窗显示灰色的问题!!!

解决 Element UI 嵌套弹窗显示灰色的问题 &#x1f50d; 问题描述 ❌ 在使用 Element UI 开发 Vue 项目时&#xff0c;遇到了一个棘手的问题&#xff1a;当在一个弹窗(el-dialog)内部再次打开另一个弹窗时&#xff0c;第二个弹窗会显示为灰色&#xff0c;影响用户体验。 问题…

EasyUI数据表格中嵌入下拉框

效果 代码 $(function () {// 标记当前正在编辑的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …

JAVA学习*Object类

Object类 Object类是所有类的父类 类中有一些方法&#xff08;都需要掌握&#xff09; toString()方法 在学习类的对象的时候有介绍过了&#xff0c;当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较&#xff0c; 如果左右两侧是基本类型变量&#…

安装和部署Tomcat并在idea创建web文件

一、背景 实验任务为安装Tomcat并创建web文件 为提高安装效率并且通俗易懂&#xff0c;免得大量文字浪费时间&#xff0c;这里我们采用图片加文字的方式来给大家讲解这个安装教程。 二、安装过程 首先第一步一定要注意你是否下载了JDK&#xff0c;如果你是像我一样下载一个…

一站式电脑工具箱,功能全面且实用

小明工具箱是一款集成了系统设置、维护工具、实用工具、图像处理等四大类工具的电脑工具箱&#xff0c;涵盖了上百种实用工具&#xff0c;能够满足用户在文件管理、文本处理、系统优化、图像处理等多方面的需求。 初次使用&#xff0c;需双击软件&#xff0c;便会自动将工具解压…

NO.55十六届蓝桥杯备战|排序|插入|选择|冒泡|堆|快速|归并(C++)

插⼊排序 插⼊排序(Insertion Sort)类似于玩扑克牌插牌过程&#xff0c;每次将⼀个待排序的元素按照其关键字⼤⼩插⼊到前⾯已排好序的序列中&#xff0c;按照该种⽅式将所有元素全部插⼊完成即可 #include <iostream> using namespace std; const int N 1e5 10; …

OpenGL入门

一、环境搭建 ‌库依赖安装‌ 需要安装GLFW&#xff08;窗口管理&#xff09;和GLAD&#xff08;函数指针加载库&#xff09;。在Windows下推荐使用Visual Studio的vcpkg包管理工具进行安装&#xff0c;Linux下通过apt-get安装相关依赖‌。 ‌窗口初始化‌ 使用GLFW创建窗口并…

JVM(基础篇)

一.初识JVM 1.什么是JVM JVM全称Java Virtyal Machine&#xff0c;中文译名 Java虚拟机 。JVM本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件(将字节码解释成机器码)。 2.JVM的功能 解释和运行&#xff1a;对字节码文件中的指令号&#xff0c;实时…

VMware安装ubuntu22.04.5 server

下载Ubuntu镜像 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04.5/ 安装系统 打开vmware 点击创建新的虚拟机 选择自定义 点击下一步 选择稍后安装操作系统&#xff0c;点击下一步 选择Linux系统&#xff0c;选择ubuntu64&#xff0c;点击下一步 选择安装位置&…

Docker容器之Dockerfile

用来构建镜像的文件。是指就是命令&#xff0c;参数&#xff0c;脚本。 指令合集以及说明 构建镜像图解: 实战测试&#xff1a; 构建自己的ubuntu&#xff1a; FROM ubuntu MAINTAINER liux ENV MYPATH /usr/local WORKDIR $MYPATH RUN apt-get update RUN apt install net-…

STM32G030移植RT-Thread

移植流程 移植前需要安装Keil.STM32G0xx_DFP.1.2.0.pack组件&#xff0c;大致的移植过程&#xff1a; CubeMX配置RT-Thread组件配置工程模板配置 参考例程配置&#xff1a;拷贝仓库原有的stm32g070-st-nucleo工程&#xff0c;然后另起一个名字&#xff0c;目录结构如下 完整…

【网络】网关

【网络】网关 网关 是计算机网络中用于连接两个不同网络的设备或服务器&#xff0c;它充当着“翻译器”和“转发器”的角色&#xff0c;将数据包从一个网络传递到另一个网络&#xff0c;并在必要时进行协议转换和数据重包装。 主要功能 数据转发&#xff1a;当本地网络设备发…

用JS+Promise实现简单消息队列

一、什么是消息队列 消息队列是一种用于在软件系统之间传递消息的技术。它常被用于解耦不同组件或模块之间的通信&#xff0c;减少系统中各个部分之间的直接依赖关系。消息队列可以实现异步通信&#xff0c;发送方将消息发送到队列中&#xff0c;接收方从队列中获取消息并进行处…

【Python爬虫】使用python脚本拉取汽车网站品牌数据

示例代码说明&#xff1a; 在汽车之家网站拉取当月排行榜中汽车品牌、销量和价格信息&#xff0c;存为csv文档输出&#xff0c;使用正则表达式获取网页内容 import re import pandas as pd import requests# 汽车之家车型列表页URL url https://cars.app.autohome.com.cn/ca…

批量修改 PPT 文档中主题、编辑时长、来源等元数据信息

每一个 PPT 文档被创建之后&#xff0c;都会包含一些元数据信息。这些元数据信息记录着文件的作者、创建时间、修改时间、打印时间等信息。这些信息默认都是自动生成的&#xff0c;如果我们想要对这些元数据进行修改&#xff0c;当然也是可以的。今天就给大家介绍一下如何批量修…

丐版插入selectdb模拟

为了模拟不断插入数据到库里&#xff0c;写个简单的循环脚本 #!/bin/bash #计算时差 function getTiming(){start$1end$2start_secho $start | cut -d . -f 1start_nsecho $start | cut -d . -f 2end_secho $end | cut -d . -f 1end_nsecho $end | cut -d . -f 2time_micro$((…

Off-Road-Freespace-Detection配置pytorch2.0.0

一、概述 在github上进行开源代码搜索&#xff0c;发现了Off-Road-Freespace-Detection&#xff08;链接如下所示&#xff09;。这是对越野环境可通行区域的检测&#xff0c;在经过测试之后&#xff0c;发现对自己有益。 GitHub - chaytonmin/Off-Road-Freespace-Detection: O…

常见中间件漏洞之四:Apache

1. CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在⽬录穿越漏洞,在路径穿越⽬录<Directory/>Require all granted</Directory>允许被访问的的情况下&#xff08;默认开启&#xff09;&#xff0c;攻击…