0
问题:想要将cv :: VideoCapture对象传递到不同的线程。我希望能够动态处理我可以拥有的摄像机数量。OpenCV 2.4.5&Boost for Passing VideoCapture
建议的解决方案:插入到载体中,并通过作为参数进螺纹:
插入机构:
std::vector< boost::shared_ptr<cv::VideoCapture> > CamVect;
for(int i=0;i<6;i++){
boost::shared_ptr<cv::VideoCapture> cvInputObj(new cv::VideoCapture(i));
if((*cvInputObj.get()).isOpened()){
CamVect.push_back(cvInputObj);
ValidCams++;
}
}
检索机制:创建局部矢量并指定在数据传递给矢量作为这样:
cVision::cVision(std::vector< boost::shared_ptr<cv::VideoCapture> > CamVect)
{
Cameras=CamVect;
}
在此之后,我去继续做下面拉出图像:
注意,一些类型定义为如下:
typedef std::vector< boost::shared_ptr<cv::VideoCapture> > CameraContainer;
typedef CameraContainer::iterator CamIterator;
利用这一点,我创建了一个迭代,并尝试获取图像。从我从class definition聚集在“>>”运营商只是做后跟一个检索()
void cVision::grabImage(int CamNumber){
int index=0;
for(CamIterator it=Cameras.begin();it!=Cameras.end();++it)
{
if(index==CamNumber) {
if((*it)->grab()) {
cout<<"Successfully grabbed!"<<endl;
if((*it)->retrieve(imCur[CamNumber],0))
cout<<"Successfully retrieved!"<<endl;
else
cout<<"Error retrieving"<<endl;
}
} else index++;
}
}
问题抓斗():现在看来似乎是成功调用抢()方法,但未能上检索? (这是我的猜测):
libv4l2: error dequeuing buf: Invalid argument
VIDIOC_DQBUF: Invalid argument
Successfully grabbed!
任何建议将非常有帮助!