手撕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

相关文章

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量