手撕OpenCV源码之图像金字塔

2024-05-28 07:38
文章标签 源码 图像 opencv 金字塔

本文主要是介绍手撕OpenCV源码之图像金字塔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像金字塔

图像金字塔式多分辨率处理的一种方法,多分辨率处理理论有效的统一了多个学科的技术,多分辨率处理技术包括来自信号处理的子带编码,来自数字语音识别的正交滤波及金字塔图像处理。如其名称所示,多分辨率理论涉及多个分辨率下的信号(或图像)表示与分析。这种方法的优势很明显,,某种分辨率下无法检测的特性,可以在另外的分辨率下很容易检测。
我们观察图像时,看到的通常是由相似纹理和灰度级连成的区域,他们相结合形成了物体。如果物体的尺寸较小或者对比度较低,那么我们通常以较高分辨率来研究他们;如果物体的尺寸较大,或者对比度较高,则粗略的观察就已足够。如果较小物体和较大物体(对比度较低和较高的物体)同时存在,那么以不同分辨率来研究他们讲更具优势,当然这就是多分辨率处理的基本动机。
从数学角度来看,图像是具有局部变化统计特性灰度值的二维阵列,而这种统计特性是有类似边缘和对比同质区域突变特性的不同组合导致的。例如在同一幅图像的不同部分,局部直方图可能变化很明显,这就使得为整幅图建立统计模型非常困难,甚至不可能建立统计模型。
以多种分辨率来表示图像的一种结构就是图像金字塔,这种结构非常有效,且结构简单。图像金字塔最初用于机器视觉和图像压缩,是一系列以金字塔形状排列的、分辨率逐步降低的图像集合。本文将介绍opencv中金字塔函数的使用方法,以及代码实现细节。关于代码的实现,本次将结合opencv中opencl的实现进行分析。

1. 函数原型

pyrUp

void cv::pyrUp	(InputArray src,OutputArray dst,const Size & dstsize = Size(),int borderType = BORDER_DEFAULT 
)		

该函数实现的功能是滤波放大,函数接口很好理解,简介如下:

  • src,dst:输入输出图像
  • size:这个参数默认值是dst的size,就是Size(src.cols*2, src.rows*2);如果用户自己设置输出的size,则需要满足如下条件:
  |dstsize.width−src.cols∗2| ≤ (dstsize.widthmod2)    |dstsize.height−src.rows∗2| ≤ (dstsize.heightmod2)

pyrDown

void cv::pyrDown(InputArray src,OutputArray dst,const Size& dstsize = Size(),int borderType = BORDER_DEFAULT 
)	

该函数实现的功能是滤波缩小,函数接口与pyrUp类似。只是size满足的条件相反:

  |dstsize.width * 2 − src.cols| ≤ (dstsize.widthmod2)    |dstsize.height * 2 − src.rows| ≤ (dstsize.heightmod2)

2. pyrUp 与 pyrDown 示例代码

#include "iostream"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;
const char* window_name = "Pyramids Demo";
int main( int argc, char** argv )
{cout << "\n Zoom In-Out demo \n ""------------------  \n"" * [i] -> Zoom in   \n"" * [o] -> Zoom out  \n"" * [ESC] -> Close program \n"

这篇关于手撕OpenCV源码之图像金字塔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009944

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显