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

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函