C++ 在一台摄像机上进行多个视频捕获
我可能有一个以上的摄像机拍摄。不幸的是,有时与摄像机的连接似乎被终止 例如:C++ 在一台摄像机上进行多个视频捕获,c++,opencv,video-capture,C++,Opencv,Video Capture,我可能有一个以上的摄像机拍摄。不幸的是,有时与摄像机的连接似乎被终止 例如: Mat img; VideoCapture v1(0); v1.read(img); //img is a valid picture VideoCapture v2(0); v1.read(img); //img is a valid picture v2.read(img); //img is a valid picture v2 = v1; v2.read(img); //
Mat img;
VideoCapture v1(0);
v1.read(img); //img is a valid picture
VideoCapture v2(0);
v1.read(img); //img is a valid picture
v2.read(img); //img is a valid picture
v2 = v1;
v2.read(img); //img is not a valid picture. Connection seems to be closed
这是正确的行为,还是OpenCV中的错误
有没有办法检查特定的devicenumber是否已经打开并获取负责类
伪代码:
Mat img;
VideoCapture v1(0);
VideoCapture v2 = alreadyOpen(0);
alreadyOpen(0){
if(VideoCapture(0).isOpen()){ //how do i check that
return "v1" //how do i know where v1 is
}else{
return VideoCapture(0);
}
}
见评论:
这是不可能的,可能是一个错误/不清楚OpenCV的行为是否是故意的。您能否尝试解释一下,为什么您希望在第一个位置为同一设备进行两次单独的捕获?这似乎很奇怪。我在调试某些输入/输出以保存某些类的状态时偶然发现了这一点。在那里,我有VideoCaptureVector,并按照
VideoCaptureVector[0]=VideoCapture[0]
的思路做了一些事情,尽管VideoCaptureVector[0]
已经有一个到设备0的开放链接。你为什么要这样做?一旦可以将映像复制到另一个位置并拥有所需数量的副本,就没有理由这样做。每个设备只能有一个打开的句柄。我想不出为什么你需要为同一台设备提供两个视频捕获对象,只需复制一份mat@JamesBarnett:我可以让v1和v2都访问设备0。原因是调试。因为VideoCapture甚至有一个refcount
,我假设它会使用这个。。。