1 概述 通过前面的介绍已经了解,OpenSceneGraph及其扩展位于系统的API一级,即系统的底层绘图硬件和相应的软件驱动程序之上封装了OpenGL,并对其余的底层图形显示方式予以支持,利用OpenSceneGraph可以轻松地开发其上层的应用程序。OSG层次结构图如下图所示。 <p align=center><img src="https://p9-juejin
1 概述本节中,我们将一起探讨 OpenCV 中霍夫变换相关的知识点,并了解了OpenCV 中实现霍夫线变换的HoughLines、HoughLinesP函数的使用方法,以及 实现霍夫圆变换的HoughCircles 函数的使用方法。在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在。在许多应用场合中需要快速准确地检测出直线或者圆。其中一种非常有效的解决问题的
1 scharr 滤波器我们一般直接称scharr为滤波器,而不是算子。上文已经讲到,它在OpenCV中主要是配合Sobel算子的运算而存在的。下面让我们直接来看看其函数讲解。2 计算图像差分:Scharr()函数使用Scharr滤波器运算符计算x或y方向的图像差分。其实它的参数变量和Sobel基本上是一样的,除了没有ksize核的大小。C++:void Scharr( InputArra
1 Laplacian 算子简介Laplacian算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度grad的散度div。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义如下。(1)f的拉普拉斯算子也是笛卡儿坐标系xi中的所有非混合二阶偏导数求和。(2)作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数。对于k≥2,表达式(1)(或(2))定义了一个算子Δ:C(R)→C(R);
1 sobel算子的基本概念Sobel 算子是一个主要用于边缘检测的离散微分算子(discrete differentiation operator)。它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。在图像的任何一点使用此算子,都将会产生对应的梯度矢量或是其法矢量。2 sobel算子的计算过程我们假设被作用图像为I然后进行如下操作。(1)分别在x和y两个方向求导。①水平变化:将
1 概述本节中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器 Canny算子、Sobel算子、Laplacian算子以及Scharr滤波器。2 边缘检测的一般步骤在具体介绍之前,先来一起看看边缘检测的一般步骤。1.【第一步】滤波边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤
1 概述本节我们将一起探讨OpenCV填充算法中漫水填充算法相关的知识点,并了解OpenCV中实现漫水填充算法的两个版本的 floodFill 函数的使用方法。 漫水填充法是一种用特定的颜色填充连通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。漫水填充经常被用来标记或分离图像的一部分,以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区域,掩码会加速处理过
1 概述上一节中,我们重点了解了腐蚀和膨胀这两种最基本的形态学操作,而运用这两个基本操作,可以实现更高级的形态学变换。所以,本节的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算、形态学梯度、“顶帽”、“黑帽”等。首先,我们需要知道,形态学的高级形态,往往都是建立在腐蚀和膨胀这两个基本操作之上的。而关于腐蚀和膨胀,概念和
1 腐蚀大家应该知道,膨胀和腐蚀(erode)是相反的一对操作,所以腐蚀就是求局部最小值的操作。我们一般都会把腐蚀和膨胀进行对比理解和学习。下文就可以看到,两者的函数原型也是基本一样的。腐蚀操作示例如下图所示。腐蚀的数学表达式如下。下图给出了毛笔字的腐蚀效果示例。2 腐蚀:erode 函数erode函数使用像素邻域内的局部极小运算符来腐蚀一张图片,从src输入,由dst输出。支持就地(in
1 概述形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。而我们图像处理中的形态学,往往指的是数学形态学。下面一起来了解数学形态学的概念。数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之 上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、
1 概述方框滤波(box Filter)被封装在一个名为boxblur的函数中,即boxblur函数 的作用是使用方框滤波器(box filter)来模糊一张图片,从src输入,从dst输出。2 参数讲解函数原型如下。 C++void boxFilter(InputArray src, OutArray dst, int ddepth, Size ksize, Point anch
1 概述非线性滤波有中值滤波、双边滤波等。正如我们在上节中讲到的,线性滤波可以实现很多种不同的图像变换。而非线性滤波,如中值滤波器和双边滤波器,有时可以达到更好的实现效果。在上节中,我们所考虑的滤波器都是线性的,即两个信号之和的响应和它们各自响应之和相等。换句话说,每个像素的输出值是一些输入像素的加权和。线性滤波器易于构造,并且易于从频率响应角度来进行分析。然而,在很多情况下,使用邻域像素的非线
1 高斯滤波的理论简析高斯滤波是一种线性平滑滤波,可以消除高斯噪声,广泛应用于图像处理的减噪过程。通俗地讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。大家常说高斯滤波是最有用的滤波操作,
1 概述均值滤波,是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的平均值(所有像素加权系数相等),其实说白了它就是归一化后的方框滤波。我们在下文进行源码剖析时会发现,blur函数内部中其实就是调用了一下boxFilter。下面开始讲均值滤波的内容吧。2 均值滤波的理论简析均值滤波是典型的线性滤波算法,主要方法为邻域平均法,即用一片图像区域的各个像素的均值来代替原图像
1 概述方框滤波(box Filter)被封装在一个名为boxblur的函数中,即boxblur函数 的作用是使用方框滤波器(box filter)来模糊一张图片,从src输入,从dst输出。2 参数讲解函数原型如下。 C++void boxFilter(InputArray src, OutArray dst, int ddepth, Size ksize, Point anchor =
1 概述滤波说的通俗一点,就是平滑处理。平滑处理(smoothing)也称模糊处理(bluring),是一种简单且使用频率很高的图像处理方法。平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真。在涉及到降低图像分辨率时,平滑处理是非常好用的方法。2 图像滤波与滤波器图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响
3 示例程序:XML和YAML文件的写入让我们先看一个关于XML或YAML文件的写入实例,示例代码如下://---------------------------------【头文件、命名空间包含部分】-------------------------------// 描述:包含程序所使用的头文件和命名空间//-------------------------------------
1 XML和YAML 文件简介本节我们将一起认识XML和YAML这两种文件类型。 所谓XML,即eXtensible Markup Language,翻译成中文为“可扩展标识语 言”。首先,XML是一种元标记语言。所谓“元标记”,就是开发者可以根据自身需要定义自己的标记,比如可以定义标记<book>、<name>。任何满足XML 命名规则的名称都可以标记,这就向不同的应用程序打开了的大门。此外,
接着上一节继续讲述傅里叶变换4 返回DFT最优尺寸大小:getOptimalDFTSize函数getOptimalDFTSize函数返回给定向量尺寸的傅里叶最优尺寸大小。为了提高离散傅里叶变换的运行速度,需要扩充图像,而具体扩充多少,就由这个函数来计算得到。C++int getOptimalDFTSize(int vecsize)此函数的唯一一个参数为int类型的vecsize,向量尺寸,即图片的
1 概述离散傅里叶变换(Discrete Fourier Transform,缩写为DFT),是指傅里叶变换 在时域和频域上都呈现离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号做DFT,也应当对其经过周期延拓成为周期信号再进行变换。在实际
1 概述本节我们将学习如何用OpenCV进行图像对比度和亮度值的动态调整。2 理论依据首先了解一下算子的概念。一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像。下面是算子的一般形式。本节所讲解的图像亮度和对比度的调整操作,其实属于图像处理变换中比较简单的一种——点操作(point operators)。点操作有一个特点:仅仅根据输入像素值(有时可加上某些全局信息或参数),来
1 概述上篇博客中我们讲解了如何使用 addWeighted 函数进行图像混合操作,以及如何将ROI和addWeighted函数结合起来,对指定区域进行图像混合操作。而为了更好地观察一些图像材料的特征,有时需要对RGB三个颜色通道的分量进行分别显示和调整。通过OpenCV的split和merge方法可以很方便地达到目的。 本篇博客,我们会详细介绍这两个互为“冤家”的函数。首先来看看进行通道分离的s
1 概述我们一起学习在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及如何将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作。2 感兴趣区域: ROI在图像处理领域,我们常常需要设置感兴趣区域(ROI, region of interest),来专注或者简化工作过程。也就是从图像中选择的一个图像区域,这个区域是图像分析所关注
1 图像在内存之中的存储方式在之前的章节中,我们已经了解到图像矩阵的大小取决于所用的颜色模型,确切地说,取决于所用通道数。如果是灰度图像,矩阵就会如下图所示。而对多通道图像来说,矩阵中的列会包含多个子列,其子列个数与通道数相等。例如,如下图所示RGB颜色模型的矩阵。可以看到,OpenCV中子列的通道顺序是反过来的—BGR而不是RGB。很多情况下,因为内存足够大,可实现连续存储,因此,图像中的各行就
1 数字图像存储概述我们可以通过各种各样的方法从现实世界获取到数字图像,如借助相机、扫描仪、计算机摄像头或磁共振成像等。通常由显示屏上看到的都是真实而漂亮的图像,但是这些图像在转化到我们的数字设备中时,记录的却是图像中的每个点的数值。比如在下图中你可以看到草坪的颜色是一个包含众多强度值的像素点矩阵。可以这样说,矩阵就是图像在数码设备中的表现形式。OpenCV 作为一个计算机视觉库,其主要的工作是处
1 概述在OpenCV中,HighGUI模块为高层GUI图形用户界面模块,包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容。本章旨在为大家展开讲解OpenCV中最常用到的一些交互操作,包括图像的载入、显示和输出,为程序添加滑动条,以及鼠标操作等常用内容。2 图像的载入、显示和输出到文件学习过以往版本OpenCV的读者应该都清楚,对于OpenCV1.0时代的基于C语言接口
1 前沿OpenCV 作为一个在全球使用人数众多的计算机视觉库,其实官方已经准备了大量的示例程序,供广大初学者学习。而市面上绝大多数的OpenCV书籍教程和网络博文的第一手知识来源,就是这些官方提供的技术文档和示例程序。2 光流法(optical flow)光流(optical flow)法是目前运动图像分析的重要方法,由Gibso于1950年首先提出。光流用来指定时变图像中模式的运动速度,因为当
1 OpenCVOpenCV的全称是 Open Source Computer Vision Library,直译就是“开源计算 机视觉库”。取代表开源的单词“Open”、“Computer”的首字母“C”以及“Vision” 的首字母“V”,组合命名为“OpenCV”。OpenCV于1999年由Intel建立,如今由 Willow Garage提供支持。它是一个 基于开源发行的跨平台计算机视觉库
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号