c++ - 有条件地调用 cv::VideoCapture 构造函数

标签 c++ opencv

我想调用cv::VideoCapture有条件的构造函数。如果 argc == 2,则用户指定了一个视频文件,我想加载它。否则使用默认相机。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char* argv[])
{
    VideoCapture cap(argc == 2 ? argv[1] : 0);

    return 0;
}

编译运行

$ g++ -g -Wall -o main main.cpp `pkg-config opencv --cflags --libs`
$ ./main

但遗憾的是它似乎不起作用,我明白了

OpenCV: Couldn't read movie file ""

三元运算符在一种情况下返回字符串,在另一种情况下返回整数。我认为这是行不通的,因为我不知道 C++ 构造函数的一些特性。

做我想做的最干净的方法是什么?我可以在不使用 new 的情况下执行此操作,这样我就不必在程序结束时自己释放内存吗?

最佳答案

你把这个复杂化了。使用 open :

VideoCapture cap;
if(argc == 2) {
    cap.open(argv[1]); // calls: open(const String& filename)
} else {
    cap.open(0);       // calls: open(int index) 
}

在三元运算符中,两个操作数必须属于同一类型。参见 here了解详情。但是您的类型有 intchar*,因此,即使代码可以编译,也可能导致运行时错误。

关于c++ - 有条件地调用 cv::VideoCapture 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662788/

相关文章:

c++ - 通过VideoWriter发送帧;无法再次捕捉到它(OpenCV 3.1,c++)

c++ - 精确打印简单的 double 值

c++ - VC6中如何查看一个unicode CString的值?

c++ - 如何在opencv中找到单个图像关键点之间的欧氏距离

c - 如何从图像的直方图中过滤感兴趣的对象?

c++ - OpenCV C++ 中的孔填充滤波器

C++线程使用函数对象,如何调用多个析构函数而不调用构造函数?

c++ - 如何使用SQLite将数据从数据库中的值导出到C/C++中的字符串或char中?

c++ - 组合框中的自动建议

image-processing - OpenCV 在同一窗口中相邻显示 2 个图像