问题:在板子下面运行程序打不开摄像头。
请问各位有在arm板的linux系统下使用Opencv打开过摄像头吗?
我在if(cap.isopen()!=1)下面写了打开一张图片,结果打开了图片,摄像头没有打开。
void MainWindow::on_OpenCamera_clicked()
{
if(capture.isOpened())
capture.release();
capture.open(3);
Mat a(640,480,3);
if(capture.isOpened()!=1)
{
image=Mat2QImage(a);
ui->label->setPixmap(QPixmap::fromImage(image));
}
if(capture.isOpened())
{
rate=capture.get(CV_CAP_PROP_FPS);
capture>>frame;
if(frame.empty()!=1)
{
image=Mat2QImage(frame);
ui->label->setPixmap(QPixmap::fromImage(image));
timer=new QTimer(this);
timer->setInterval(30);
connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame()));
timer->start();
}
}
}
板子的/dev下面在插上支持uvc的摄像头后多出一个video3,我拿cap.open(int index),index取-1,0,1,3试过,还是不行。
在电脑上运行是可以的,选取0就打开自带的摄像头,选取1就可以打开uvc摄像头。
Opencv移植到板子上的库应该没问题。
在电脑上的/dev下面有个v4l2的文件夹,当摄像头插拔的时候有文件生成和消失,但是在板子上的/dev下面没有v4l2。我在板子上面用find搜索也没有找到带有v4l或者v4l2的文件,但是用友善之臂提供的应用程序可以打开摄像头。这里的问题是,板子的linux系统到底支不支持v4l或者v4l2,按理来说应该是支持的吧,否则提供的应用程序如何能打开摄像头?这些东西应该是编译到内核中的?
网上有的人说是Opencv在cmake的时候没有with v4l的选项,需要把target中的arm-linux改成Linux,才能出现with v4l的选项,这样的确是可以,但是在make的时候报错,不知如何解决,而且也不确定到底是不是这个原因,就是说Opencv在make的时候是否已经带有v4l了?