我想调用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了解详情。但是您的类型有 int
和 char*
,因此,即使代码可以编译,也可能导致运行时错误。
关于c++ - 有条件地调用 cv::VideoCapture 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662788/