我正在使用opencv3.4.5,我的相机是Fire-I 630c。我不确定cv :: VideoCapture是否能够从相机读取帧。我尝试输入不同的参数,例如0,cv :: CAP_FIREWIRE,cv :: CAP_IEEE1394,这些参数都不适用于视频捕获。以下是我的代码。
由于未显示调试消息,因此似乎无法识别摄像机。
//This run function is to capture images from the camera and display them in two label Qt widgets.
void videoProcessorThread::run()
{
using namespace cv;
VideoCapture camera(cv::CAP_FIREWIRE);
Mat inFrame, outFrame;
while(camera.isOpened() /*&& !isInterruptionRequested()*/)
{
qDebug() << "Camera is opened ....";
camera >> inFrame;
if(inFrame.empty())
continue;
bitwise_not(inFrame, outFrame); //cv::bitwise_not
emit inDisplay(
QPixmap::fromImage(
QImage(
inFrame.data,
inFrame.cols,
inFrame.rows,
inFrame.step,
QImage::Format_RGB888).rgbSwapped()));
emit outDisplay(
QPixmap::fromImage(
QImage(
outFrame.data,
outFrame.cols,
outFrame.rows,
outFrame.step,
QImage::Format_RGB888).rgbSwapped()));
}
}
mainwindow.cpp中的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&processor, SIGNAL(inDisplay(QPixmap)),
ui->inVideo, SLOT(setPixmap(QPixmap)));
connect(&processor, SIGNAL(outDisplay(QPixmap)),
ui->outVideo, SLOT(setPixmap(QPixmap)));
processor.start();
}
答案 0 :(得分:1)
据我了解,您使用的是非常昂贵的基于IEEE-1394的工业相机。该模型没有兼容MS DirectShow的驱动程序,因此很难从OpenCV连接,但是它具有制造商的本地API。我建议您使用DLL包装此API中的某些函数,从基于OpenCV的应用程序中加载此DLL,并逐帧从相机中加载数据。