一,按下图建立QT工程
二,绘制显示窗口
三,添加程序(由于v4l2程序过长就没贴出请到资源下载)
1,工作线程代码
video_thread::video_thread():QThread()
{ quit_flag = false; } video_thread::~video_thread() { this->quit(); quit_flag = true; this->wait(); } void video_thread::run() { m_video.init_video();//打开视频设备 while(!quit_flag) {
m_video.get_data();//获取视频数据 unsigned char *rgb; rgb = new unsigned char [m_video.buf.length*2];//根据yuyv像素点和rgb像素所站内存比分配rgb m_video.yuvtorgbO(rgb,640,480);//yuyv转换成RGB QImage img = QImage(rgb,640,480,QImage::Format_RGB888); emit image_data(img); msleep(150); delete[] rgb;//不能在sleep前释放掉否则显示的图片会出现问题 }
m_video.release_video();//在线程释放前释放设备 } |
2.主线程程序
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->show_ptn,SIGNAL(clicked()),this,SLOT(start_thread())); connect(ui->stop_ptn,SIGNAL(clicked()),this,SLOT(stop_thread())); connect(ui->quit_ptn,SIGNAL(clicked()),this,SLOT(close())); } void MainWindow::start_thread() { video = new video_thread(); video->start();
connect(video,SIGNAL(image_data(const QImage &)),this,SLOT(show_picture(const QImage &))); } void MainWindow::show_picture(const QImage &img) { ui->show_label->setPixmap(QPixmap::fromImage(img)); } void MainWindow::stop_thread() { delete video; } MainWindow::~MainWindow() { delete ui; } |
3,程序截图
下载地址:点击打开链接