我的演示代碼是從我的筆記本電腦的集成攝像頭和USB視頻採集卡(STK1160)中選擇一個攝像頭。我的代碼已附加。Qt 5與USB視頻採集卡
main.cpp中:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCamera>
#include <QCameraInfo>
#include <QCameraImageCapture>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QList <QCameraInfo> camList;
QCamera *camera;
private slots:
void onCameraChanged(int);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
camera = NULL;
connect(ui->cameraComboBox,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,
&MainWindow::onCameraChanged);
// find all available cameras and put them in the combo box
camList = QCameraInfo::availableCameras();
for(QList <QCameraInfo>::iterator it = camList.begin();it!=camList.end();++it) {
ui->cameraComboBox->addItem(it->description());
}
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::onCameraChanged(int idx) {
if(camera != NULL) {
camera->stop();
}
camera = new QCamera(camList.at(idx),this);
camera->setViewfinder(ui->viewfinder);
camera->setCaptureMode(QCamera::CaptureStillImage);
camera->start();
}
我的問題是,當我選擇從組合框中的USB採集卡,我收到以下錯誤消息:
libv4l2: error turning on stream: Message too long
CameraBin error: "Error starting streaming on device '/dev/video1'."
CameraBin error: "Could not negotiate format"
和相機視圖全是黑色。任何人有任何想法?我在AV屏幕上測試了我的視頻輸入,效果很好。
沒有人會回答.... – zhoudingjiang
Qt用戶庫相對其他用戶來說很小,這導致了S.O上很少/很慢的響應。不幸的是:-( –
我在發佈這個問題後幾天內解決了這個問題,通過使用openCV。fork()過程,並且在子進程中,我運行openCV代碼來讀取相機,就像普通的USB攝像頭一樣然後,我使用共享內存+信號量在子進程和母進程之間交換數據,雖然有點複雜,但運行得很好,需要注意的一點是openCV中的圖像存儲爲BGR,而圖像中Qt保存爲RGB。 – zhoudingjiang