Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何找出C+;中的OpenCV.at函数使用的类型+;?_C++_Opencv - Fatal编程技术网

C++ 如何找出C+;中的OpenCV.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) <

对于给定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";
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。。。您必须了解浮点、双精度、短精度等的数据大小。。。但我会写一个答案的。好极了,米卡。这正是我需要的。谢谢