OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Mat - The Basic Image Container

在家这段时间内,发现了这样的OpenCV库自带的教程,感觉不错,尝试翻译并且添加一些tips,帮助自己学习,同时也与各位交流一下。

核心模块.核心功能

这里这两部分说的是核心模块以及核心功能的简介,其中蓝字部分可以链接到相关部分,这里我采用顺序方法,从第一部分,即 “Mat:The Basic Image Container”开始叙述。

2.1 基本的图像容器—矩阵

目标

我们可以通过许多途径从真实世界获取数字图像,例如:数码相机、扫描仪、计算机断层扫描以及磁成像共振等等。不管怎样,那些都只是我们人类所看到的图像。然而,当把这些图像传输到数码设备中时,则需要把图像中的每个点按照数字化存储。

例如,在上面的图像中,可以看到汽车的后视镜在计算机中无非是用一个矩阵来包括所有的像素点的强度值(intensity values)。我们可以根据我们的需求来存取这些像素值,但是在计算机世界中,所有的图像可能最终都会被简化为数字化的矩阵以及用于描述这个矩阵的其他信息。OpenCV就是一个主要专注于处理和操纵这些信息的计算机视觉库。因此,我们需要做的第一件事情就是去了解并熟悉OpenCV这个库是如何存储和操纵图像的。

矩阵

OpenCV在2001年已经出现了。在那时OpenCV库使用C语言作为其接口语言,并且使用被称为IplImage的这样的一个C语言的结构体作为其图像存储结构。这些东西将会在大部分老旧的教材和手册中出现。伴随而来的一系列和C相关的问题,进行内存管理成为这其中最大的问题。早期的OpenCV库编译的基础在于它假设用户会负责进行内存的管理,例如内存分配以及析构。这些在小的程序的开发过程中都不是什么问题,一旦你的代码量开始大幅度增加,内存管理也就成了你实现你开发目的的一个很大的羁绊。

十分幸运的是,C++的诞生引入了类的概念,从而或多或少的使用户从内存管理这个泥潭中得到解放。C++可以完全兼容C,因此这样的改变不会出现兼容问题。因此OpenCV 2.0这个版本引入新的C++语言接口,这个接口可以提供一种新的方法,使用户摆脱内存管理,简洁代码(写得少,自动实现的多)。C++实现的OpenCV接口的不利之处也就是在只支持C语言的嵌入式系统中无法使用。因此,除非你要在嵌入式平台中开发,否则还是使用C++的OpenCV借口吧(除非你你是一个有受虐倾向的程序员或者你想要找点麻烦)。

时间: 2025-01-12 11:35:31

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Mat - The Basic Image Container的相关文章

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Interoperability with OpenCV 1

2.10 和OpenCV的互用性 目标 对于OpenCV的开发团队来说,不断提升OpenCV库是非常重要的.我们不断考虑那些可以减轻你工作过程的方法,同时还要保障库的灵活性.新的C++接口就是我们为了这个而开发出来的东西.然而,向后兼容性仍然是很重要的.我们不想打碎那些你使用更早的OpenCV库写下的代码.因此,我们为了保障这个事情从而加上了一些函数.在下面的教程中,你会学习到: 1.相比于同样使用的第一版本的OpenCV库,第二版本中有了什么变化. 2.如何在图像中添加一些高斯噪点. 3.什么

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— File Input and Output using XML and YAML files

2.9XML和YAML格式作为文件输入输出 目标 你会从文中找到下面问题的答案: 1.如何从OpenCV使用的YAML或者XML文件中读取和打印文字条目.? 2.对于OpenCV数据结构如何做到相同的事情? 3.对你的数据结构如何做到? 4.OpenCV的数据结构,例如FileStorage,FileNode或者FileNodeIterator的使用方法. 源代码 你可以从这里下载代码或者从OpenCV的源代码库的samples/cpp/tutorial_code/core/file_input

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY——Random genenrator and text with OpenCV

2.7 随机产生器和OpenCV当中的文字 目标 在教程中,你会学习到: 1.使用随机数字产生类(RNG)并且如何从均匀分布中获得随机数字. 2.使用OpenCV的putText函数在窗口中显示文字 代码 1.在前一个的教程(Basic Drawing)中,我们画了不同的几何图形,给出了例如坐标(使用Points形式的)的输入参数,颜色,线条粗细,等等.你可能已经注意到我们对于那些参数都是给出了特殊的值. 2.在本教程中,我们打算使用为绘图参数使用随机值.同样,我们打算使用大量的几何图形来填满我

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Discrete Fourier Transform

2.8 离散的傅立叶变换 目标 我们要寻找以下问题的答案: 1.什么是傅立叶变换,为什么我们要用这个? 2.在OpenCV中如何做到? 3.例如copyMakeBorder(),merge(),dft(),getOptimalDFGSize(),log()以及normalize()函数的用法. 源代码 你可以从这里下载或者从samples/cpp/tutorial_code/core/discrete_fourier_transform/discrete找到代码. #include "openc

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Adding(blending) two images using OpenCV

2.5 改变图像的对比度和明暗 目标 在教程中,你会学到如何: 1.读取像素值 2.用0初始化一个矩阵 3.学习staurate_cast是做什么的 4.获取有关像素变换的一些更酷的信息(Get some cool info about pixel transformations) 理论 注意,下面的解释来自于Richard Szeliski所写的<Computer Vision:Algorithms and Applications> 图像处理 1.一般的图像处理机是一个接受一个或多个输入图

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY——Adding (blending) two images using OpenCV

目标 在教程中你会学到: 1.什么事线性混合,它有什么用. 2.如何使用addWeighted将两个图像相加 理论 注意:下面的解释来自Richard Szeliski写的<Computer Vision:Algorithms and Application>. 在前面的教程中,我们已经学习了一些像素的运算.一个有意思的二元(两个输入)运算符就是线性混合运算符: 通过α从0到1变化这个运算符可以被用做两个图像或者录像之间的时间交融(cross-dissolve,这里tutorial里面用的是c

Nginx - Core Module Directives

The following is the list of directives made available by the Core module. Most of these directives must be placed at the root of the configuration file and can only be used once. However, some of them are valid in multiple contexts. If that is the c

AngularJS------Error: Cannot find module &#39;@angular-devkit/core&#39;

如图: 解决方法: 进入项目目录下执行以下代码 npm i --save-dev @angular-devkit/core AngularJS------Error: Cannot find module '@angular-devkit/core' 原文地址:https://www.cnblogs.com/tianhengblogs/p/8452045.html

2.Nginx学习-The HTTP Core module

http core module是Ngnix提供WEB服务的最核心模块,默认被开启.本篇文章将讲述该模块的一些配置 配置文件结构: http {     server {// virtual website         location{         }     }     server{       location{       }     } } 原文地址:http://blog.51cto.com/xwandrew/2087751