我目前的问题是,我想知道cv::Mat
的类型 - 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".
你是如何处理的?
答案 0 :(得分:1)
首先,来自相机的格式只有一个:CV_8UC3
。这在OpenCV中是硬编码的,任何视频格式在发送给用户之前都会转换为此格式。所以
capture >> frame;
将始终返回每个通道8位的RGB图像。
现在,对于其他类型,您可以编写函数,保持在OpenCV中支持的类型不多:Mat可以是char
,uchar
,{{1}类型},short
,ushort
,int
,uint
,float
,1到512个频道(根据最新文档。)所以编写自己的{ {1}}并不难。