前言
阵列的数据类型定义了为阵列的每个元素(图片中的像素)分配的比特数以及如何使用这些比特数表示元素的值。
单通道阵列
Returns the depth of a matrix element.
The method returns the identifier of the matrix element depth (the type of each individual channel). For example, for a 16-bit signed element array, the method returns CV_16S . A complete list of matrix types contains the following values:
CV_8U (8 bit 无符号整数)8-bit unsigned integers ( 0..255 )
CV_8S (8 bit 有符号整数)8-bit signed integers ( -128..127 )
CV_16U(16 bit 无符号整数)16-bit unsigned integers ( 0..65535 )
CV_16S (16 bit 有符号整数)16-bit signed integers ( -32768..32767 )
CV_32S (32 bit 有符号整数)32-bit signed integers ( -2147483648..2147483647 )
CV_32F (32 bit 浮点数)32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
CV_64F (64 bit 浮点数)64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )
图像数据在计算机内存中的存储顺序为以图像最左上点(也可能是最左下点)开始。
举例来说:下图展示了一个使用8 bit无符号整数的单通道阵列。因为数据类型是8 bit无符号整数,因此这个阵列的每个元素为0-255的值。
多通道阵列
CV_8UC1 (单通道阵列,8 bit 无符号整数)
CV_8UC2 (2通道阵列,8 bit 无符号整数)
CV_8UC3 (3通道阵列,8 bit 无符号整数)
CV_8UC4 (4通道阵列,8 bit 无符号整数)
CV_8UC(n) (n通道阵列,8 bit 无符号整数 (n 可以从 1 到 512) )
举例来说:下图展示了一个使用8 bit 无符号整数的3通道阵列。因为数据类型是8 bit无符号整数,因此这个阵列的每个元素为0-255的值。由于是3通道阵列,所以阵列由带有3个元素的元组组成,第一个元组是{122, 102, 32},第二个元组是 {58, 78, 185} ,以此类推。
IPIIMage位深度
用于指定图像中的每个像素可以使用的颜色信息数量。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就更逼真。
就是说位深度位1的图像可能有两个值:黑色和白色,位深度位8的图像由2^8 (256)个可能的值。例如:位深度位8的灰色模式图像由256种灰色。
RGB图像有三个颜色通道组成。8位/像素的RGB图像中每个通道有256个值。所以RGB有256*256*256个值。
回到正题
构造方法(行数(高度),列数(宽度),阵列)
OpenCV 模版Vec
typedef Vec<uchar, 2> Vec2b
typedef Vec<uchar, 3> Vec3b
typedef Vec<uchar, 4> Vec4b
typedef Vec<short, 2> Vec2s
typedef Vec<short, 3> Vec3s
typedef Vec<short, 4> Vec4s
typedef Vec<int, 2> Vec2i
typedef Vec<int, 3> Vec3i
typedef Vec<int, 4> Vec4i
typedef Vec<float, 2> Vec2f
typedef Vec<float ,3> Vec3f
typedef Vec<float ,4> Vec4f
typedef Vec<float, 6> Vec6f
typedef Vec<double, 2> Vec2d
typedef Vec<double ,3> Vec3d
typedef Vec<double ,4> Vec4d
typedef Vec<double ,6> Vec6d
例如 单通道CV_8UC1
RGB:
其代码效果:
持续更新中...