class V4L2API
{
public:
explicit V4L2API(const char *dev="/dev/video0");
~V4L2API();
int video_init();//打开设备、设置采集格式等
int video_start();//开始采集
int video_stop();//停止采集
int video_getframe(char *buffer, int *size);//读数据
int video_destroy();//释放空间、关闭设备
bool yuv422torgb24(unsigned char *buffer, unsigned char *rgbdata, int w, int h);//将YUV数据转化为RGB数据
private:
int fd;
char dev[64];
unsigned char *mmps[4];//保存映射空间首地址
unsigned int mmpsize[4];
};
2.设置开始按钮开始采集数据
void V4L2Win::on_startbt_clicked(){if(v4l2api == nullptr){
v4l2api = new V4L2API("/dev/video0");//初始化摄像头对象}
v4l2api->video_start();//开始采集//启动定时器,开始采集
mtimer.start(100);}
QCameraInfo info = Cameralist.at(ui->comboBox->currentIndex());//获取一个摄像头信息
camera = new QCamera(info);//通过摄像头信息创建设备
viewFinder = new QCameraViewfinder(ui->cameraView);//创建一个预览窗口
camera->setViewfinder(viewFinder);
viewFinder->resize(ui->cameraView->size());
viewFinder->show();
camera->start();//开始
4.初始化抓取数据的对象
imageCap = new QCameraImageCapture(camera);connect(imageCap,&QCameraImageCapture::imageCaptured,this,&ModelWin::get_frame);