首页 > 代码库 > OpenCV 2.4.9 学习笔记(4)—— 像素类型与Templates的限制使用

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 matrix2 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

 

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