OpenCV 2.4.9 学习笔记(4)—— 像素类型与Templates的限制使用

限制使用templates

  C++中的Templates使得接口机制非常好用,高效而且能够保证数据与算法的安全。但是过多地使用templates可能会增加计算时间和代码长度,有时候还能难区分接口和实现。在OpenCV中过多使用templates并不是一件好事,OpenCV的refman中提到OpenCV中很多的算法代码文件动不动就几千行,而且OpenCV需要简化对其他语言的支持,像JAVA、PYTHON、MATLAB等并没有templates,所以使用templates也会受到限制,还有一些其他的原因。总的来说,在现在的OpenCV版本中,是限制使用templates的。

基本存储类型(像素)

OpenCV操作的原始数据类型(像素级)有以下几种:

Mat_<uchar>对应的是CV_8U,Mat_<uchar>对应的是CV_8U,Mat_<char>对应的是CV_8S,Mat_<int>对应的是CV_32S,Mat_<float>对应的是CV_32F,Mat_<double>对应的是CV_64F,对应的数据深度如下:

8-bit unsigned integer (uchar)
8-bit signed integer (schar)
16-bit unsigned integer (ushort)
16-bit signed integer (short)
32-bit signed integer (int)
32-bit floating-point number (float)
64-bit floating-point number (double)

在枚举中的代号为:

1 enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };

举例:

1 Mat mtx(3, 3, CV_32F); // make a 3x3 floating-point matrix
2 Mat cmtx(10, 1, CV_64FC2); // make a 10x1 2-channel floating-point matrix (10-element complex vector)
3 Mat img(Size(1920, 1080), CV_8UC3); // make a 3-channel (color) image of 1920 columns and 1080 rows.
4 Mat grayscale(image.size(), CV_MAKETYPE(image.depth(), 1)); // make a 1-channel image of the same size and same channel type as img
时间: 2024-12-07 04:33:06

OpenCV 2.4.9 学习笔记(4)—— 像素类型与Templates的限制使用的相关文章

OpenCV(C++接口)学习笔记2-像素级的图像操作

1.通过成员函数at(int y, int x)访问 这种方法需要知道像素保存的格式. (1) 这是为模板类型的函数,因为一个函数的返回类型只有在运行时才会知道. (2)这个函数返回的是一个向量即Vector,故有下标的操作. image.at<uchar>(j,i)= 255; 在单通道图像中,采用以上语句可以获取图像(i,j)处的灰度值(注:先行后列,一般用j表示行(rows),i表示列(cols)).如果是灰度图像的话,只需要更改一个数据就可以了.如果是rgb图像的话,就要用"

OpenCV(C++接口)学习笔记4-Mat::operator = 的陷阱

当我们想要将一个Mat对象的数据复制给另一个Mat对象时,应该怎么做呢? 我们发现,OpenCV提供了重载运算符Mat::operator = ,那么,是否按照下列语句就可以轻松完成对象的赋值呢? Mat a; Mat b = a; 答案是否定的! 我们可以从reference manual 中看到: Mat::operator = Provides matrix assignment operators. C++: Mat& Mat::operator=(const Mat& m) Pa

OpenCV(C++接口)学习笔记1-图像的读取、显示、保存

OpenCV在2.0版本之后添加了C++接口函数,之前学习的都是C语言的接口函数,现在OpenCV已经发展到2.4.9版本了,所以决定学习C++接口函数,跟上节奏. 1.创建图像 cv::Mat image; 采用类cv::Mat来定义图像变量或矩阵变量. 当然你也可以指定图像的大小: cv::Mat img(240,320,CV_8U,cv::Scalar(100)); 参数CV_8U中的U代表unsigned,而S代表signed.对于三通道彩色图像可以用CV_8UC3.你也可以声明16或3

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别.通过这两天的学习,算是捡回了漏掉的知识. 在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明. 但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号"&

C# in Depth Third Edition 学习笔记-- 可空类型

1. 没有值怎么办? 客户下了一份订单,有订货日期,但尚未发货,但没有发货日期,怎么表述发货日期? C#2以后使用可空类型. 2. 为什么值类型的变量不能是null? 引用类型变量,其值是一个引用,即一个非空引用值提供了访问一个对象 的途径,对于null来说,作为一个特殊值,意味着不引用任何对象.所有引用的默认值都为null,内存中表示全零. 值类型变量,其值是它本身的真实数据.null不是有效的值类型的值. 3. C#1 解决不存在可空值类型 魔值:DateTime,牺牲公元元年中的某个值Da

MySQL学习笔记之三 表类型

你能用的数据库引擎取决于MySQL在安装时候是如何被编译的.要添加一个新的引擎,就必须编译MySQL.仅仅为了添加一个特性而编译应用程序的想法对于Windows的开发人员来说可能有点小题大做,得不偿失,但是在Unix的世界里,这已经成为了标准.在缺省的情况下,MySQL支持三个引擎:ISAM.MyISAM和HEAP.另外两种类型InnoDB和Berkley(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之初就考虑到数据库被查询的次数远远大于

初探swift语言的学习笔记(可选类型?和隐式可选类型!)

可选类型.隐式可选类型 其次swift还引入一个较有趣的初始值设置语法使用"?"操作符及"!"号操作符 如:"var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var greeting = "Hello!" if let name = op

OpenCV 2.4.9 学习笔记(1)—— 基本功能结构

一些关于OpenCV(2.4.9版本)的学习笔记,作为记录,以免自己忘了. 安装与配置 OpenCV的下载.安装以及在各个平台(Windows/Linux等)配置网上有很多的资料,自己就不用存了.需要或者遇到问题的时候再说. 基本模块结构 OpenCV(Open Source Computer Vision Library),一个遵循BSD协议的计算机视觉技术开源库,包含了几百个计算机视觉算法.目前最新版本应该是OpenCV3.0,alpha版和beta版都有了,我目前是用的2.4.9,3.0版

C# 指针学习笔记之指针类型

大学的时候学过C++.C,最近工作也不是很忙,就想起看看C#中的指针,看看.回忆一下啊,指针的用法,以下学习笔记摘自msdn:指针类型 在不安全的上下文中,类型可以是指针类型以及值类型或引用类型.指针类型声明具有下列形式之一: type* identifier; void* identifier; //allowed but not recommended 下列类型都可以是指针类型: sbyte.byte.short.ushort.int.uint.long.ulong.char.float.d

C#学习笔记二: C#类型详解

前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. 再会有三篇博客  这个系列的就会结束了. 也算是自己对园子中@Learning Hard出版的<<C#学习笔记>>的一个总结了. 博客内容基本上都是白天抽空在公司写好的了, 但是由于公司内部网络不能登录博客园所以只能够夜晚拿回来修改,  写的不好或者不对的地方也请各位大神指出. 在下感