OpenCV笔记
Huo的藏经阁
linux爱好者,平时喜欢阅读内核源码,从源码角度解开操作系统神秘面纱
展开
-
OpenCV稀疏矩阵SparseMat
OpenCV中一般一张图片在内存中用Mat来表述及管理,Mat内部申请一块类似与数组的内存用于存储图片中的每个像素的值即为稠密矩阵,但是有时在矩阵中其值为零的元素远远多于非为零的元素个数即稀疏矩阵,如何此时还使用Mat进行存储 显然非常浪费空间,为了应对此中场景,OpenCV使用SparseMat类来应对稀疏矩阵场景,稀疏矩阵内部内存为一个hash表,其值为0的元素其实并没有占用内存空间,只存储其...原创 2020-02-12 22:56:24 · 3061 阅读 · 0 评论 -
OpenCV防止数据溢出saturate_cast
数字图像处理中,其数据类型一般为无符号类型,实际计算过程中会经常出现数据溢出现象,在无符号数据中如果其值出现小于0 则称之为向下溢出underflow,当计算结果大于其该数据类型能表示的最大值时称之为overflow时,比如 当为符号8位一个字节时,如果计算结果出现小于0 则称为underfow,计算结果大于0,称为overflow.在实际的C/C++语言中,对于无符号类型,其出现反转时,将会...原创 2020-02-10 22:38:10 · 2192 阅读 · 1 评论 -
OpenCV辅助函数(utility functions)
OpenCV提供了一系列帮助函数,用来帮助开发人员能够快速进行开发,下面来逐一分析其帮助函数cv::alignPtr()该函数主要是将给定的指针按照给定的自己来对齐,API形式如下:template<typename _Tp> static inline _Tp* alignPtr(_Tp* ptr, int n=(int)sizeof(_Tp))其中ptr为传递的原...原创 2020-02-07 23:28:47 · 1790 阅读 · 0 评论 -
OpenCV辅助对象(help objects)(6)_InputArray和OutputArray
opencv中的cv:DataType<>解决了算法与数据类型分类的问题,使算法能够适应多种类型的数据,以及能够方便提取出数据类型。但是OpenCV的基本数据类型有多多,Mat matx, vec等等以及为了适应cuda和opencl而特殊封装的数据类型,以及还要适应c++ 的vect等,在封装接口时,如果将所有的数据类型都作为入参提供给用户适应,可以想象API入参是非常的多。为了适应...原创 2020-02-03 22:47:29 · 586 阅读 · 0 评论 -
OpenCV辅助对象(help objects)(5)_DataType
cv::DataType<>为OpenCV中用于提取数据类型的模板,主要是利用C++ traits技术,实现算法与数据类型 的分离,增加算法兼容性,<learning OpenCV3>中对DataType的介绍如下:When OpenCV library functions need to communicate the concept of a particular...原创 2020-02-03 12:45:27 · 394 阅读 · 0 评论 -
OpenCV辅助对象(help objects)(4)_Exception
OpenCV源码中一般程序如果遇到一些异常(比如空指针等之类的)需要跑出异常一般使用Exception类。Exception是OpenCV在C++std::exception异常中进行了再次封装。Exception类Exception类定义如下:比较重要的几个参数:int code:opencv 错误码,用于标明是哪类错误。String err:错误提示信息Strin...原创 2020-02-02 17:21:26 · 583 阅读 · 0 评论 -
OpenCV辅助对象(help objects)(3)——Ptr
OpenCV中的Ptr(智能指针)经过多次版本修改之后,在OpenCV4.0版本之后编译器需要指出C++11的编译器才能编译。Ptr类也完全进行了修改,将Ptr修改为了使用C++11中的shared_ptr 智能指针,Ptr只是对shared_ptr进行了简单的封装。细心读者发现关于Ptr这块,与OpenCV 3x系列版本有很大差别。OpenCV版本改动记录:https://github.co...原创 2020-02-02 13:55:54 · 664 阅读 · 0 评论 -
OpenCV辅助对象(help objects)(2)_Range
Range在opencv中经常被用来表示一段连续的整数数字序列,整体数据结构比较简单,有两个元素start 和 end,分别为序列的开始和结束,取值范围为一个半开半闭空间: [start, end), 取值范围大于等于start,但是小于endRange类Range类的原定义如下:总结如下:Method Description Range() 默认构造函数 ...原创 2020-02-01 21:26:40 · 405 阅读 · 0 评论 -
OpenCV辅助对象(help objects)(1)_TermCriteria
OpenCV除了基本数据结构(Basic data types)之外还有很多的辅助结构才能使opencv使用越来越完善,下面来分析第一个辅助结构TermCriteria,该结构是OpenCV3中经过整个引入的,之前旧版本为CvTermCriteria.TermCriteria是经常被用来作为算法的终止条件何时退出,当算法达到一定的迭代次数之后才进行退出,要么达到最大迭代次数(COUNT或MAX...原创 2020-02-01 19:13:59 · 430 阅读 · 0 评论 -
OpenCV中基本数据结构(8)_Complex
Complex为OpenCV中的复数表示类,与STL 中的complex类似但是不一样,两者可以互换,与STL的complex最大的不同是,STL中获取到实部和虚部的值 分别使用real()和image(),而OpenCV是直接使用类中的成员变量re和im获取,相比STL 使用更加高效方便。下面来自以《learning Opencv3》一段说明,(书中重要的原句,给没时间阅读原著的开发者,直接...原创 2020-01-31 16:43:20 · 688 阅读 · 0 评论 -
OpenCV中基本数据结构(7)_Vec
Vec系列数据结构是Matx的一个派生类,其矩阵的行的大小永远固定为一行,列大小从1到6不等,可以认为类似与C++ vector,但与C++ 的vector又有很大不同,,以下不同来自于一段技术博客,讲的比较清楚: OpenCV与C++ ...原创 2020-01-31 14:18:31 · 1954 阅读 · 2 评论 -
OpenCV中基本数据结构(6)_Matx
Matx为OpenCV轻量级的矩阵,被称为fixed matrix classes,意思是每个矩阵的大小都是固定的,主要是应对矩阵数据比较小的场景,最新的版本4.0不超过6*6大小的矩阵,旧版本一般不超过5*5,它的出现主要是应对小数据场景,因为是fixed matrix,所以其占用空间大小都是在编译阶段都是已知且固定好的,因为为轻量级的,数据较小,相对Mat,其申请和释放都是非常快速的,一般比较...原创 2020-01-30 22:11:19 · 1714 阅读 · 0 评论 -
OpenCV中基本数据结构(5)_RotatedRect
RotatedRect也是表示一个矩形框,但是与Rect不同的是,RotatedRect可以带倾斜角的矩形,如下图所示:RotatedRect结构中包括三个变量:Point2f center:为矩形的中心点位置Size2f size:矩形框width和heightfloat angle:为左上角与X轴夹角。与X轴的平行方向角度为0,逆时针旋转角度为负,顺时针旋转角度为正。当...原创 2020-01-30 16:39:40 · 1160 阅读 · 0 评论 -
OpenCV中基本数据结构(4)_Rect
Rect数据结构经常是在OpenCV中被用来表示为一个矩形尺寸,其成员包括x,y, width,height,其中x和y分别表示矩形框的左上角的起始点坐标,width和height分别表示宽和高。RectOpenCV中预定义好的几种Rect,用来支持不同的数据类型:Rect2i:整型intRect2f: floatRect2d: double源代码定义如下:其...原创 2020-01-29 19:57:55 · 2912 阅读 · 0 评论 -
OpenCV中基本数据结构(3)_Size
Size数据结构经常被OpenCV用来表示尺寸,其成员为width和height,被用来表示矩阵或者图片的宽和高。SizeSize预定义个几个类型有:Size2i:整型intSize2l:int64Size2f:floatSize2d:double源代码如下:最后都是使用的Size_类Size_类Size_类和Point_,Scalar_类相似,相对M...原创 2020-01-29 16:07:12 · 4294 阅读 · 0 评论 -
OpenCV中基本数据结构(2)_Scalar
Scalar是一个固定的四维大小的vector,一般是主要用于表示颜色RGBA各个颜色的值,其数据精度为double类型,Scalar类其实是Vec类的一个派生类,是只有1行4列的矩阵,对Vec不清楚的可以了解下https://blog.csdn.net/weixin_42730667/article/details/104121969Scalar定义Scalar定义如下:其实...原创 2020-01-28 19:12:39 · 508 阅读 · 0 评论 -
OpenCV中基本数据结构(1)_Point
为了便于对一些常见的数据进行操作,OpenCV定义了一些常见的数据结构(Point ,Scalar等),以方便后续对数据算法的实现,主要分为basic data type、helper objects、large array types等三种数据结构类型,其中basic data type是最常见使用频率最高的数据结构,主要包括一些简单的向量和矩阵等等,主要用于局部变量中,此类型最典型的是数据都是...原创 2020-01-28 14:34:18 · 3689 阅读 · 0 评论 -
OpenCV Mat主要用法(2)_MatExpr
在《OpenCV Mat主要用法(1)》主要是详细分析了Mat类中的主要Method用法,可以了解到Mat中常用的创建,访问,变量等一些方法,但是有时候还远远不够。OpenCV Mat主要功能就是将图片信息统一保存到Mat 矩阵中,使之能够按照矩阵的方式进行各种算法的演进,但实际上Mat存储方式为矩阵,为了使用方便就应该提供各种常见的加减乘除矩阵式操作方式,如果每次让开发人员来自己实现两个矩阵的加...原创 2020-01-27 18:16:45 · 2807 阅读 · 2 评论 -
OpenCV Mat主要用法(1)
Mat 为OpenCV中的核心数据结构,主要负责图像数据的保存,Mat创建方法有很多种Mat构造函数可以使用Mat构造函数,创建Mat,Mat构造函数有多种形式的参数,来满足要求Mat 主要构造函数 Description Mat() 默认构造函数 Mat(int rows, int cols, int type) 矩阵的行和列或者是图片的高和宽 ...原创 2020-01-16 20:07:38 · 1956 阅读 · 0 评论 -
Opencv打印显示Mat方法
Opencv打印Mat几种方法1:使用CV:format函数使用Opencv 提供的format()API接口:static inlinePtr<Formatted> format(InputArray mtx, int fmt)其中mtx为Mat 数据,fmt为所支持的打印打印风格,其参数可以为以下:Formatter::FMT_C:C风格打印Format...原创 2020-01-15 18:39:53 · 11133 阅读 · 0 评论 -
opencv_modules.hpp 头文件
有时使用一些别人其他编译好的opencv库之后,不知道其编译时包含的哪些编译选项以及模块,可以查看opencv_modules.hpp头文件中,编译所包含的头文件,里面列出来编译时所选择的模块,定义宏格式为HAVE_OPENCV_XXXX之类的格式:...原创 2020-01-13 14:59:27 · 1981 阅读 · 0 评论 -
opencv空间色彩转换
opencv中空间色彩转换函数为 cvtColor()提供不同空间的色彩转换,如将RGB三通道转换成单通道灰度图等, 其API如下:void cv::cvtColor(InputArray src, OutputArray dst, in...原创 2019-11-16 11:14:49 · 344 阅读 · 0 评论 -
学习opencv之cvtColor
opencv 提供了cvtColor()函数,用于在图像中不同的色彩空间进行转换,用于后续处理。在使用cvtColor之前首先需要了解下基本的图像色彩模式,色彩模式决定了打印或显示的图片颜色。图像色彩模式位图模式位图模式是图像中最基本的格式,图像只有黑色和白色像素,是色彩模式中占有空间最小的,同样也叫做黑白图,它包含的信息量最少,无法包含图像中的细节,相当于只有0或者1一副彩色图如...原创 2019-10-07 19:38:05 · 62591 阅读 · 4 评论 -
Opencv 图片 读取,显示,保存基本操作
Opencv的图片读取,显示,保存是图片操作的基础,实验用的图片来自于lenan:http://www.lenna.org/为了使用方便,主要是使用opencv的python版本的接口,其官网链接为http://docs.opencv.org/Read an imageopencv读取图片API为cv.read,其API原型为:retval = cv.imread( file...原创 2019-10-07 11:26:42 · 2022 阅读 · 0 评论 -
windows下python 版本opencv 安装
笔者使用的是python 版本为3.7.4,其他版本应该也没有太大问题可以查看官网opencv 说明为4.1.0版本:https://docs.opencv.org/4.1.0/da/df6/tutorial_py_table_of_contents_setup.html上面安装例子较为麻烦,直接使用pip安装opencv 4.1.0版本,使用之前记得使用python修改为国内源,速度...原创 2019-10-05 15:11:03 · 441 阅读 · 0 评论 -
OpenCV中Mat属性step,size,step1,elemSize,elemSize1
Mat的step,size,step1,elemSize,elemSize1这几个属性非常容易混淆。 OpenCV的官方参考手册也没有解释清楚这几个概念。前一段时间研究了一下每个属性的含义,如果有什么错误,欢迎大家指正。step1(i):每一维元素的通道数step[i]:每一维元素的大小,单位字节size[i]:每一维元素的个数elemSize():每个元素大小,单位字节e...转载 2019-08-29 11:24:27 · 540 阅读 · 1 评论