[英]Call cv::VideoCapture constructor conditionally
我想有條件地調用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
這樣做嗎,這樣我就不必在程序結束時釋放內存了嗎?
表達式A ? B : C
A ? B : C
的返回類型為B
並且C
必須隱式轉換為B
有些編譯器將不編譯(最佳行為),有些編譯器將不編譯。 在您的情況下, B = char *
和C = int
。 我相信0
被解釋為指向地址0或NULL
的指針,其字節等於'\\0'
即以空終止符表示C樣式字符串的結尾,因此為空字符串。
如果您堅持采用單線運輸,則:
std::unique_ptr<VideoCapture> capture = (argc == 2 ? std::make_unique<VideoCapture>(argv[1]) : std::make_unique<VideoCapture>(0));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.