3

我目前的问题是我想知道从视频文件中cv::Mat抓取的 -frames的类型。cv::VideoCapture文档没有具体说明(通常情况下,所以即使我在这种特殊情况下忽略了它,获得解决一般问题的答案仍然会有所帮助)。

当然,我可以打开相应的 OpenCV 头文件并通过CV_64FC2, ... 宏找到与 Mat 的type(). 但我有点厌倦了。必须有更简单的方法。

没有任何功能可以让我将 Mat 翻译type()成人类可读的格式吗?像这样:

cv::Mat myMatWithUnknownType;

// Some code modifying myMatWithUnknownType.
// ...

std::string readableType = myMatWithUnknownType.typeString();
std::cout << readableType; // Prints "CV_64FC3".

你怎么处理那件事呢?

4

1 回答 1

1

首先,来自相机的格式只有一种:CV_8UC3. 这在 OpenCV 中是硬编码的,任何视频格式在发送给用户之前都会转换为此。所以

capture >> frame; 

将始终返回每通道 8 位的 RGB 图像。

现在,对于其他类型,您可以编写您的函数,但要注意 OpenCV 支持的类型并不多:一个 Mat 可以是1 到 512 个通道的char, uchar, short, ushort, int, uint, float,类型double(根据最新的文档.) 所以写你自己type_to_string()的并不难。

于 2012-04-08T14:25:08.030 回答