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

fab*_*aia 0 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;
}
Run Code Online (Sandbox Code Playgroud)

我编译并运行它

$ g++ -g -Wall -o main main.cpp `pkg-config opencv --cflags --libs`
$ ./main
Run Code Online (Sandbox Code Playgroud)

但遗憾的是它似乎没有用,我得到了

OpenCV: Couldn't read movie file ""
Run Code Online (Sandbox Code Playgroud)

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

做我想要的最干净的方法是什么?我可以不使用new这样做,所以我不必在程序结束时自己释放内存吗?

Mik*_*iki 5

你过度复杂了.用途open:

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

在三元运算符中,两个操作数必须是相同的类型.详情请见此处.但你有型intchar*,因此,即使该代码可以编译的,它可能会导致运行错误.