是否有一种简单可靠的方法来找出我应该为给定CV类型的Mat的。at函数使用什么等效类型?
例如,我如何知道空格应该用ushort
, float
和Vec3b
填充?
Mat mat1(1, 2, CV_16UC1, 12345);
std::cout << mat1.at<___>(0, 1) << "n";
Mat mat2(1, 2, CV_32FC1, 67.89);
std::cout << mat2.at<___>(0, 1) << "n";
Mat mat3(1, 2, CV_8UC3, Scalar(65, 66, 67));
std::cout << mat3.at<___>(0, 1)[2] << "n";
使用
- 类型:http://ninghang.blogspot.de/2012/11/list-of-mat-type-in-opencv.html vec <<li>向量:http://docs.opencv.org/modules/core/doc/basic_structures.html/gh>
我构造了下面的表:
C1 C2 C3 C4 C6 (not sure whether C6 subtype exists as a macro)
CV_8U uchar Vec2b Vec3b Vec4b
CV_8S char -
CV_16U ushort -
CV_16S short Vec2s Vec3s Vec4s
CV_32S int Vec2i Vec3i Vec4i
CV_32F float Vec2f Vec3f Vec4f Vec6f
CV_64F double Vec2d Vec3d Vec4d Vec6d
与uchar == unsigned char
和ushort == unsigned short
对于缺失的类型,如果你愿意,可以创建自己的typedef:
typedef Vec<ushort, 2> Vec2us;
或者你只是用一个相同大小的类型(Vec2s
)访问它,然后转换它
但最终我认为理解格式意味着什么(32位浮点数与3通道=每个矩阵元素3个浮点值)如果看表要好得多…