【Webcam设计】USB摄像头图片采集+QT显示
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显示相关推荐
- (原创)基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
在(原创基于ZedBoard的Webcam设计(一):Zedboard上的USB摄像头(V4L2接口)的图片采集中,我们完成了ZedBoard上USB摄像头的单幅图片采集,采集到的图片是存储在文件系统 ...
- 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
在(原创基于ZedBoard的Webcam设计(一):Zedboard上的USB摄像头(V4L2接口)的图片采集中,我们完成了ZedBoard上USB摄像头的单幅图片采集,采集到的图片是存储在文件系统 ...
- USB摄像头图片采集+QT显示(二)
硬件平台:Digilent ZedBoard + USB 摄像头+HDMI显示器 开发环境:Windows XP 32 bit + Wmare 8.0 + Ubuntu 10.04 +Qt Creat ...
- linux下基于qt和v4l2驱动的usb摄像头视频采集与显示,用v4l2和framebuffer实现usb摄像头视频采集并显示...
Windows程序是基于消息的,不管其封装形式如何,最后都要包含如下代码MSG msg;while(GetMesssage(msg)){TranslateMessage(msg);DispatchMe ...
- QT界面GUI设计之Lable图片及文字显示
QT界面GUI设计之Lable图片及文字显示 今天主要写一下Qt界面设计的Label相关用法,因为没有系统的学习,所以今天发现以前错了好多,今天记录一下,Label的相关用法. 首先是搭建一个Labe ...
- Linux 下摄像头视频采集与显示
说明: 1.本文所提及的摄像头不是zc0301p,使用的API不是V4L,显示所使用的上位机不是QT,特此说明. 2.UVC只是一个驱动,如果它能成功驱动摄像头,会在/dev目录下出现video(或v ...
- 【OpenCV】Pyqt5界面设计+USB摄像头
文章目录 前言 一.界面设计 二.编写代码 总结 前言 用Python编写一个Pyqt5的GUI界面,包含5个按键,功能是打开.关闭摄像头,捕获图片,读取本地图片,灰度化和Otsu自动阈值分割5个功能 ...
- 国外linux内核视频播放器,基于Video for Linux内核的USB摄像头视频信号采集实现
摘要:Video for Linux是Linux中关于视频设备的内核驱动,本文介绍了在Video for Linux内 >> 基于ARM9和USB摄像头的网络视频采集系统设计 基于嵌入式V ...
- linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集
展开全部 在linux下所e5a48de588b662616964757a686964616f31333337613134有设备都是文件.所以对摄像头的操作其实就是对文件的操作.USB摄像头的设备文件 ...
- USB摄像头设置采集亮度和对比度
1.设置usb摄像头的亮度和对比度 2.ffmpeg中滤镜设置亮度和对比度 3.obs中的色彩范围设置 1.设置usb摄像头的亮度和对比度 要在 UVC 协议中设置亮度和对比度,你需要使用 v4l2- ...
最新文章
- Oracle备份与恢复案例(四)
- python获取节假日_用python获取表格中的节假日起始日期
- s5pv210启动debian出错提示bash: cannot set terminal process group (-1): Inappropriate ioctl for device...
- EntityFramework Core是否可以映射私有属性呢?了解一下。
- centos 8 安装使用配置
- edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...
- 发布python项目到pypi,以便供他人用pip install安装
- QT每日一练day26:绘制图片
- 13.企业应用架构模式 --- 对象-关系元数据映射模式
- 【图像去噪】基于matlab GUI均值+中值+空间+高斯滤波图像去噪【含Matlab源码 763期】
- 空间统计分析-GeoDa软件
- 摩尔庄园不同服务器账号互通吗,摩尔庄园手游服务器互通吗?摩尔庄园手游不同区可以一起玩吗?...
- 2019秋招cv岗求职心得
- 荒木毬菜 小情歌日文版 - 独身OL之歌
- linux 编译过程中acx_pthread.m4类错误解决办法
- iOS —label自动换行
- JS递归的用法JavaScript递归)
- 对文件进行筛选c语言,用c语言实现文本文件中的字符筛选分析。
- 从无到有做一个身份证识别app(环境搭配,AS安装)
- js 在一个日期上面加上指定时间(几小时、几分钟、几秒)
热门文章
- 【ArcGIS|空间分析|网络分析】3 使用网络数据集查找最佳路径
- PHP推流地址获取图片
- Apache Flink 进阶(八):详解 Metrics 原理与实战
- Android Multimedia框架总结(四)MediaPlayer从Java层到C++层类关系及prepare及之后其他过...
- linux用户开放权限,linux权限设置(开放某个文件夹给指定用户)(示例代码)
- php默认登录文件,PHP 网站修改默认访问文件的nginx配置
- java商品类别如何与价格对应_java编写程序实现某超市商品查价功能。从键盘输入商品号,显示对应的商品价格,以“n”结束查询。...
- 用python计算2+4+6+…+20的值_Day4-Python-循环和分之学习-2018/7/19
- ros ubuntu 卸载_Ubuntu18.04 ROS Melodic安装与卸载
- java opencv sift_Java opencv中sift的实现