如何在C ++中找出OpenCV .at函数的用途?

时间:2015-06-02 12:31:04

标签: c++ opencv

是否有一种简单可靠的方法可以找出我应该为给定CV类型的Mat使用.at函数的等效类型?

例如,如何判断空格应填充ushortfloatVec3b

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";

1 个答案:

答案 0 :(得分:4)

使用

中的数据

我构建了下表:

        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 charushort == unsigned short

如果您想要删除类型,可以创建自己的typedef:

typedef Vec<ushort, 2> Vec2us;

或者您只是使用相同大小的类型(Vec2s)访问它,然后将其转换为

但最后我认为理解格式意味着什么(32位浮点数,3个通道=每个矩阵元素3个浮点值),如果比查看表格要好得多......