【发布时间】:2013-03-06 10:49:57
【问题描述】:
我对 OpenCV Mat 元素类型感到困惑。这是来自文档:
There is a limited fixed set of primitive data types the library can operate on.
That is, array elements should have one of the following types:
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)
...
For these basic types, the following enumeration is applied:
enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };
众所周知,C++ 标准没有以字节为单位定义基本类型的大小,那么它们如何使用这样的假设呢?我应该期待什么类型,比如说 CV_32S,它是 int32_t 还是 int?
【问题讨论】:
-
openCV 中的类型很容易理解。 CV_numbitsType。所以 CV_16S 是一个 16 位长的有符号整数。
-
那么为什么他们在文档中使用这样的名称(int、float 等),而(例如)int 可以是 64 位而不是 32 位?
-
我不太了解底层结构,但是当您使用 CV_32S 类型创建垫子时:
Mat myMat(10,10,CV_32S);您可以使用myMat.at<int>(1,1) = 1;访问它 -
顺便说一句,您发布的表格似乎是正确的,我的意思是对于左侧的每种类型,您使用括号中的 C++ 类型来访问垫子,如上面的评论所示。
-
@Ruchir 你应该可以定义一个
cv::Mat_<long>。不过,我怀疑您是否能够对其应用任何 OpenCV 功能。
标签: opencv