矩阵数据类型:
CV_<bit_depth>(S|U|F)C<number_of_channels>
bit_depth
比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说,如
如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张
灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对
应的就是CV_8
S|U|F CV_8U 8位无符号整数(0..255) unsigned char(uchar)
CV_8S 8位有符号整数(-128..127) char
CV_16U 16位无符号整数(0..65535) unsigned short(ushort)
CV_16S 16位有符号整数(-32768..32767) short
CV_32S 32位有符号整数(-2147483648..2147483647) int
CV_32F 32位浮点数(-FLT_MAX..FLT_MAX,INF,NAN) float
CV_64F 64位浮点数(-DBL_MAX..DBL_MAX,INF,NAN) double
注:INF 无穷大;NAN 未定义;
C<number_of_channels>
代表一张图片的通道数,比如:
1--灰度图片--grayImg---是--单通道图像
2--RGB彩色图像---------是--3通道图像
3--带Alph通道的RGB图像--是--4通道图像
与Vec的对照关系(CV_8S没有对应的符号)
CV_8U(uchar)
CV_8UC1 (uchar) CV_8UC2 (Vec2b) CV_8UC3 (Vec3b) CV_8UC4(Vec4b)
CV_8S(char)
CV_8SC1 (1通道) CV_8SC2 (2通道) CV_8SC3 (3通道) CV_8SC4 (4通道)
CV_16U (ushort)
CV_16UC1 (ushort) CV_16UC2 (Vec2w) CV_16UC3 (Vec3w) CV_16UC4 (Vec4w)
CV_16S (short)
CV_16SC1(short) CV_16SC2(Vec2s) CV_16SC3(Vec3s) CV_16SC4(Vec4s)
CV_32S (int)
CV_32SC1(int) CV_32SC2(Vec2i) CV_32SC3(Vec3i) CV_32SC4(Vec4i)
CV_32F (float)
CV_32FC1(float) CV_32FC2(Vec2f) CV_32FC3(Vec3f) CV_32FC4(Vec4f)
CV_64F(double)
CV_64FC1(double) CV_64FC2(Vec2d) CV_64FC3(Vec3d) CV_64FC4(Vec4d)
Vec类型的说明
uchar类型(分别为2元素,3元素,4元素): 8位
typedef Vec<uchar, 2> cv::Vec2b
typedef Vec<uchar, 3> cv::Vec3b
typedef Vec<uchar, 4> cv::Vec4b
char类型
Vec<char, 2>
at<char>(y,x) 不过只能访问单通道的矩阵
ptr<char>(y)[x]) 可以访问任何位置的矩阵点的值
short类型 都是16位的形式,区别在于有没有符号
typedef Vec<short, 2> cv::Vec2s
typedef Vec<short, 3> cv::Vec3s
typedef Vec<short, 4> cv::Vec4s
typedef Vec<ushort, 2> cv::Vec2w
typedef Vec<ushort, 3> cv::Vec3w
typedef Vec<ushort, 4> cv::Vec4w
int类型: 都是32位
typedef Vec<int, 2> cv::Vec2i typedef Vec<int, 3> cv::Vec3i
typedef Vec<int, 4> cv::Vec4i typedef Vec<int, 6> cv::Vec6i
typedef Vec<int, 8> cv::Vec8i
float类型: 同样都是32位
typedef Vec<float, 2> cv::Vec2f
typedef Vec<float, 3> cv::Vec3f
typedef Vec<float, 4> cv::Vec4f
typedef Vec<float, 6> cv::Vec6f
double类型: 都是64位
typedef Vec<double, 2> cv::Vec2d typedef Vec<double, 3> cv::Vec3d
typedef Vec<double, 4> cv::Vec4d typedef Vec<double, 6> cv::Vec6d