如何使用 CV_CAP_PROP_FOURCC?

Posted

技术标签:

【中文标题】如何使用 CV_CAP_PROP_FOURCC?【英文标题】:how to use CV_CAP_PROP_FOURCC? 【发布时间】:2014-03-14 00:30:56 【问题描述】:

这看起来很简单,但我无法让它工作。我想使用

打印出图像的格式
cvGetCaptureProperty(image, CV_CAP_PROP_FOURCC)

其中image 是 CvCapture 结构的对象。 此函数返回double。我确实将它转换为 char* 以便我可以打印出格式,但它不起作用。有什么建议吗?

【问题讨论】:

【参考方案1】:

获取double* 并将其转换:

double f = cvGetCaptureProperty(image, CV_CAP_PROP_FOURCC);
char* fourcc = (char*) (&f); // reinterpret_cast

但是,this OpenCV highgui tutorial 建议使用 C++ 接口进行以下操作:

int ex = static_cast<int>(inputVideo.get(CV_CAP_PROP_FOURCC));

// Transform from int to char via Bitwise operators
char EXT[] = (char)(ex & 0XFF),(char)((ex & 0XFF00) >> 8),(char)((ex & 0XFF0000) >> 16),(char)((ex & 0XFF000000) >> 24),0;

当然,您可以使用cvGetCaptureProperty,而不是get 方法。

【讨论】:

我这样做了,但我什么也没得到。 double f = cvGetCaptureProperty(image, CV_CAP_PROP_FOURCC); char* fourcc = (char*)(&amp;f); std::cout &lt;&lt; "\nFormat : " &lt;&lt; fourcc[0] &lt;&lt; fourcc[1] &lt;&lt; std::endl;我什么都没有。 @CroCo 呵呵,你可以按照 highgui 教程的例子(见更新),将 double 转换为 int,然后通过一系列按位运算转换为 char。 @CroCo 您也可以尝试cout &lt;&lt; "format: " &lt;&lt; EXT &lt;&lt; endl; 使用由所有按位操作创建的空终止版本。 但为什么我需要按位使用?有没有一种简单的方法可以做到这一点?此外,我尝试在 openCV 的文档中使用该方法,但是如果我访问 EXT[5],它会为我提供数据。为什么会发生这种情况?不是只有四个字符吗? @CroCo A C 字符串为null-terminated,表示最后一个字节为'\0'。不要直接访问它,因为它只是表示“字符串”的结束。 (忽略它,因为它只是用于coutknows when to stop。)【参考方案2】:

您可以使用以下功能:

// http://mkonrad.net/2014/06/24/cvvideocamera-vs-native-ios-camera-apis.html
void fourCCStringFromCode(int code, char fourCC[5]) 
    for (int i = 0; i < 4; i++) 
        fourCC[3 - i] = code >> (i * 8);
    
    fourCC[4] = '\0';

例如:

    double f = cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC);
    printf("fourcc=%d\n", f); // outputs fourcc=6
    char fourcc[5];
    fourCCStringFromCode((int)f, fourcc);
    printf("fourcc=%s\n", fourcc); // outputs fourcc=DIVX

【讨论】:

以上是关于如何使用 CV_CAP_PROP_FOURCC?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 % include % 标签在 django 中呈现模板(如部分)?

如何使用 Mockery 模拟嵌套对象,如 GuzzleHttp 请求

如何使用额外的选项(如全景)实现相机功能?

如何用radiobutton如何使用

如何使用主题api绘制任务栏按钮,如图标

如何使用 6 个按钮(如 Windows 磁贴)创建布局