C++ 如何找出C+;中的OpenCV.at函数使用的类型+;?
对于给定CV类型的Mat,是否有一种简单可靠的方法来确定.at函数应使用哪种等效类型 例如,我如何判断空格应该用C++ 如何找出C+;中的OpenCV.at函数使用的类型+;?,c++,opencv,C++,Opencv,对于给定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) <
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";
mat1(1,2,CV_16UC1,12345);
std::cout使用来自
- 类型:
- 向量:
我构建了下表:
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==无符号字符
和ushort==无符号短字符
对于缺少的类型,如果您想:
typedef Vec<ushort, 2> Vec2us;
typedef-Vec-Vec2us;
或者您只需使用相同大小的am类型(Vec2s
)访问它,然后进行转换
但最后,我认为理解格式意味着什么(3个通道的32位浮点数=每个矩阵元素3个浮点值)比查看表格要好得多…好吧CV_XCY
告诉您每个元素有多少位,是无符号、有符号还是浮点类型(X
),以及有多少个通道(Y
)。因此CV_16UC1是ushort
(16位无符号)32FC1是float
(32位浮点型),依此类推vec3b
表示字节类型(8位)的3个通道。谢谢,米卡。我的示例只是示例,即我已经知道答案:-)我在寻找一种独特的方法来知道对任何给定类型使用什么,或者,一个我可以直接查找的表。我认为我的答案类似于数据类型的白痴证明:D ok。。。您必须了解浮点、双精度、短精度等的数据大小。。。但我会写一个答案的。好极了,米卡。这正是我需要的。谢谢