https://www.cnblogs.com/surpassal/archive/2012/12/22/zed_webcam_lab2.html

QT界面显示,将采集到的图像数据通过QT显示到HDMI显示器上。采集到图像数据存在QPixmap类的对象中,并通过QLabel显示出来。内容包括Qt Creator和Qt Embedded的安装、Qt工程的建立、摄像头采集实现、Qt运行库的生成以及使用方法。

软件代码

1、新建Qt工程

启动Qt Creator,新建一个Qt Gui应用

之后选择好工程路径和工程明,其他默认,一直点下一步直道工程建立结束。

2、修改ui界面

打开mainwindow.ui,进入可视化设计界面。默认情况中间的主设计区下已经有一个QMainWindow和QWidget的对象。我们需要将采集到图像显示到一个QLabel的部件上,从右侧的部件列表的“DisplayWidget”中选择“Label”部件拖动到中间,并将大小设置为640*480,起点坐标为(5,5)。

并将原有的文本text取消。

这个时候这个Label部件已经把MainWindow遮蔽了,再把MainWindow的大小调整合适。


3、添加摄像采集代码

由于在 Webcam设计(一):USB摄像头(V4L2接口)的图片采集中我们已经实现了图片的采集,只需要工程中的v4l2grab.c和v4l2grab.h源文件添加到这个新工程中,并作相应修改即可。

修改mainwindow.cpp

//@超群天晴 http://www.cnblogs.com/surpassal/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QPixmap>
#include <QImage>
#include <QPainter>
//#include <image.h>
#include <v4l2grab.h>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QPixmap pix;QByteArray aa ;BITMAPFILEHEADER   bf;BITMAPINFOHEADER   bi;//Set BITMAPINFOHEADERbi.biSize = 40;bi.biWidth = IMAGEWIDTH;bi.biHeight = IMAGEHEIGHT;bi.biPlanes = 1;bi.biBitCount = 24;bi.biCompression = 0;bi.biSizeImage = IMAGEWIDTH*IMAGEHEIGHT*3;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;//Set BITMAPFILEHEADERbf.bfType = 0x4d42;bf.bfSize = 54 + bi.biSizeImage;bf.bfReserved = 0;bf.bfOffBits = 54;if(init_v4l2() == FALSE){}v4l2_grab();yuyv_2_rgb888();aa.append((char *)&bf,14);aa.append((char *)&bi,40);aa.append((char *)frame_buffer,640*480*3);pix.loadFromData(aa);ui->label->setPixmap(pix);close_v4l2();
}MainWindow::~MainWindow()
{delete ui;
}

其中17~18行:

17     QPixmap pix;
18     QByteArray aa ;

定义了一个QPixmap类的对象pix,用来显示图片;由于调用QPixmap类的loadFromData()函数来获取传递图像数据,关于loadFromData()函数的详细信息可以在Qt的help->index中搜索到,或者从http://doc.qt.digia.com/4.7-snapshot/index.html中查询到:

bool QPixmap::loadFromData ( const QByteArray & data, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor )

可以知道,loadFromData()要求输入参数为QByteArray类型,因而定义QByteArray的对象aa,用来存储图片数据。

同时,loadFromData()要求指定数据的格式。如果不指定,默认能支持的格式有:


是一个48~50行:

48     aa.append((char *)&bf,14);
49     aa.append((char *)&bi,40);
50     aa.append((char *)frame_buffer,640*480*3);

调用QByteArray类的append函数将图像数据存入aa中。需要注意的是,由于loadFromData函数需要输入的图像符合标准图片格式,因而需要把数据的BMP头信息也存入aa中。

52~53行:

51     pix.loadFromData(aa);
52     ui->label->setPixmap(pix);

实现了图片数据(包含头信息)向pix的传递和pix在label上的显示。

制作运行库

由于ubuntu的Qt运行库在/usr/local/Trolltech/Qt-4.7.3/下,由makefile可以看到引用运行库是

 INCPATH = -I/usr/local/Trolltech/Qt-4.7.3/mkspecs/default -I. -I/usr/local/Trolltech/Qt-4.7.3/include/QtCore -I/usr/local/Trolltech/Qt-4.7.3/include/QtNetwork -I/usr/local/Trolltech/Qt-4.7.3/include/QtGui -I/usr/local/Trolltech/Qt-4.7.3/include -I. -I. -I.

因此如果将编译后的可执行文件在arm上运行,也许早在相应的路径下找到运行库文件。Xilinx给出了Qt运行库镜像的制作方法:切换到qt-everywhere-opensource-src-4.7.3.tar.gz的解压路径,在控制台中输入

dd if=/dev/zero of=qt_lib_ext4.img bs=1M count=80
mkfs.ext4 -F qt_lib_ext4.img
chmod go+w qt_lib_ext4.img
mount qt_lib_ext4.img -o loop /mnt
cp -rf /usr/local/Trolltech/Qt-4.7.3/* /mnt
chmod go-w qt_lib_ext4.img
umount /mnt

即可。能找到生成的库文件镜像文件qt_lib_ext4.img,使用时将其挂载到

/usr/local/Trolltech/Qt-4.7.3/

即可。

挂载Qt运行库

在arm的linux文件系统中,创建目录

/usr/local/Trolltech/Qt-4.7.3/

使用

mkdir

命令一层一层建立目录。并将qt_lib_ext4.img挂载到

/usr/local/Trolltech/Qt-4.7.3/

下。

运行

使用命令

./lab2_qt_camera -qws

我们使用v4l2控制usb 摄像头,对摄像头的静态图片采集流程操作过程可以归纳:

【Webcam设计】USB摄像头图片采集+QT显示相关推荐

  1. (原创)基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示

    在(原创基于ZedBoard的Webcam设计(一):Zedboard上的USB摄像头(V4L2接口)的图片采集中,我们完成了ZedBoard上USB摄像头的单幅图片采集,采集到的图片是存储在文件系统 ...

  2. 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示

    在(原创基于ZedBoard的Webcam设计(一):Zedboard上的USB摄像头(V4L2接口)的图片采集中,我们完成了ZedBoard上USB摄像头的单幅图片采集,采集到的图片是存储在文件系统 ...

  3. USB摄像头图片采集+QT显示(二)

    硬件平台:Digilent ZedBoard + USB 摄像头+HDMI显示器 开发环境:Windows XP 32 bit + Wmare 8.0 + Ubuntu 10.04 +Qt Creat ...

  4. linux下基于qt和v4l2驱动的usb摄像头视频采集与显示,用v4l2和framebuffer实现usb摄像头视频采集并显示...

    Windows程序是基于消息的,不管其封装形式如何,最后都要包含如下代码MSG msg;while(GetMesssage(msg)){TranslateMessage(msg);DispatchMe ...

  5. QT界面GUI设计之Lable图片及文字显示

    QT界面GUI设计之Lable图片及文字显示 今天主要写一下Qt界面设计的Label相关用法,因为没有系统的学习,所以今天发现以前错了好多,今天记录一下,Label的相关用法. 首先是搭建一个Labe ...

  6. Linux 下摄像头视频采集与显示

    说明: 1.本文所提及的摄像头不是zc0301p,使用的API不是V4L,显示所使用的上位机不是QT,特此说明. 2.UVC只是一个驱动,如果它能成功驱动摄像头,会在/dev目录下出现video(或v ...

  7. 【OpenCV】Pyqt5界面设计+USB摄像头

    文章目录 前言 一.界面设计 二.编写代码 总结 前言 用Python编写一个Pyqt5的GUI界面,包含5个按键,功能是打开.关闭摄像头,捕获图片,读取本地图片,灰度化和Otsu自动阈值分割5个功能 ...

  8. 国外linux内核视频播放器,基于Video for Linux内核的USB摄像头视频信号采集实现

    摘要:Video for Linux是Linux中关于视频设备的内核驱动,本文介绍了在Video for Linux内 >> 基于ARM9和USB摄像头的网络视频采集系统设计 基于嵌入式V ...

  9. linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集

    展开全部 在linux下所e5a48de588b662616964757a686964616f31333337613134有设备都是文件.所以对摄像头的操作其实就是对文件的操作.USB摄像头的设备文件 ...

  10. USB摄像头设置采集亮度和对比度

    1.设置usb摄像头的亮度和对比度 2.ffmpeg中滤镜设置亮度和对比度 3.obs中的色彩范围设置 1.设置usb摄像头的亮度和对比度 要在 UVC 协议中设置亮度和对比度,你需要使用 v4l2- ...

最新文章

  1. Oracle备份与恢复案例(四)
  2. python获取节假日_用python获取表格中的节假日起始日期
  3. s5pv210启动debian出错提示bash: cannot set terminal process group (-1): Inappropriate ioctl for device...
  4. EntityFramework Core是否可以映射私有属性呢?了解一下。
  5. centos 8 安装使用配置
  6. edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...
  7. 发布python项目到pypi,以便供他人用pip install安装
  8. QT每日一练day26:绘制图片
  9. 13.企业应用架构模式 --- 对象-关系元数据映射模式
  10. 【图像去噪】基于matlab GUI均值+中值+空间+高斯滤波图像去噪【含Matlab源码 763期】
  11. 空间统计分析-GeoDa软件
  12. 摩尔庄园不同服务器账号互通吗,摩尔庄园手游服务器互通吗?摩尔庄园手游不同区可以一起玩吗?...
  13. 2019秋招cv岗求职心得
  14. 荒木毬菜 小情歌日文版 - 独身OL之歌
  15. linux 编译过程中acx_pthread.m4类错误解决办法
  16. iOS —label自动换行
  17. JS递归的用法JavaScript递归)
  18. 对文件进行筛选c语言,用c语言实现文本文件中的字符筛选分析。
  19. 从无到有做一个身份证识别app(环境搭配,AS安装)
  20. js 在一个日期上面加上指定时间(几小时、几分钟、几秒)

热门文章

  1. 【ArcGIS|空间分析|网络分析】3 使用网络数据集查找最佳路径
  2. PHP推流地址获取图片
  3. Apache Flink 进阶(八):详解 Metrics 原理与实战
  4. Android Multimedia框架总结(四)MediaPlayer从Java层到C++层类关系及prepare及之后其他过...
  5. linux用户开放权限,linux权限设置(开放某个文件夹给指定用户)(示例代码)
  6. php默认登录文件,PHP 网站修改默认访问文件的nginx配置
  7. java商品类别如何与价格对应_java编写程序实现某超市商品查价功能。从键盘输入商品号,显示对应的商品价格,以“n”结束查询。...
  8. 用python计算2+4+6+…+20的值_Day4-Python-循环和分之学习-2018/7/19
  9. ros ubuntu 卸载_Ubuntu18.04 ROS Melodic安装与卸载
  10. java opencv sift_Java opencv中sift的实现