u采 采集(Qt的下载和安装关于Linux的安装,你了解多少?)
优采云 发布时间: 2021-10-27 11:19u采 采集(Qt的下载和安装关于Linux的安装,你了解多少?)
一、Qt下载安装
关于Qt的安装,网上有很详细的介绍。这里仅作简要介绍。
需要两个安装包:Qt Creator 和 QTE。
1)QT 创建者
下载链接:qt-sdk-linux-x86-opensource-2010.05.1.bin
官方下载:
这是一个编译好的二进制SDK包,直接下载,不需要配置和编译,直接运行即可下载。之所以把官方链接放在下面,是因为我找了很久这个安装包,网上很多链接都失效了。我提供的第一个下载地址是使用百度云盘。最近在用,感觉效果很好。推荐第一个下载地址。
下载完成后,直接运行即可完成安装。
2)Qt Embedded for Linux:
下载链接:qt-everywhere-opensource-src-4.7.3.tar.gz
官方下载:
这是4.7.3版本的源码包,下载后需要配置编译。也推荐使用第一个地址进行下载。
解压后,将提供的Zynq Qt配置文件qmake.conf复制到qt-everywhere-opensource-src-4.7.3/mkspecs/qws/linux-arm-gnueabi-g++目录下,使用命令
./configure -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource -host-little-endian -confirm-license -nomake demos -nomake examples
配置后进行配置和编译:
make
编译结束后使用命令
make install
安装,默认安装到
/usr/local/Trolltech/Qt-4.7.3/
路径下。然后将Xilinx交叉编译器中的基本C++库复制到安装目录的lib目录下:
cp -P /path/to/cross/compiler/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* /usr/local/Trolltech/Qt-4.7.3/lib
这样就完成了 Zynq 的 Qt Embedded for Linux 的安装。
二、软件代码
1、新的Qt项目
启动 Qt Creator 并创建一个新的 Qt Gui 应用程序
然后选择项目路径和项目描述,其他默认,一直点击下一步,直接完成项目。
2、修改ui界面
打开mainwindow.ui,进入可视化设计界面。默认情况下,中间的主设计区域下已经有一个 QMainWindow 和 QWidget 对象。我们需要将采集图片显示到一个QLabel小部件上,从右侧小部件列表中的“DisplayWidget”中选择“Label”小部件,将其拖到中间,设置大小为640*480,起点坐标为 (5,5).
并取消原文正文。
此时Label组件已经覆盖了MainWindow,然后适当调整MainWindow的大小。
3、添加*敏*感*词*采集代码
因为在(原创)基于ZedBoard的Webcam设计(一):USB*敏*感*词*(V4L2接口)在Zedboard的图片采集中,我们已经实现了图片采集,只需添加项目中的v4l2grab.c和v4l2grab.h源文件对这个新建的项目进行相应的修改。
修改mainwindow.cpp
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include
4 #include
5 #include
6 #include
7 //#include
8 #include
9
10 MainWindow::MainWindow(QWidget *parent) :
11 QMainWindow(parent),
12 ui(new Ui::MainWindow)
13 {
14 ui->setupUi(this);
15
16 QPixmap pix;
17 QByteArray aa ;
18
19 BITMAPFILEHEADER bf;
20 BITMAPINFOHEADER bi;
21 //Set BITMAPINFOHEADER
22 bi.biSize = 40;
23 bi.biWidth = IMAGEWIDTH;
24 bi.biHeight = IMAGEHEIGHT;
25 bi.biPlanes = 1;
26 bi.biBitCount = 24;
27 bi.biCompression = 0;
28 bi.biSizeImage = IMAGEWIDTH*IMAGEHEIGHT*3;
29 bi.biXPelsPerMeter = 0;
30 bi.biYPelsPerMeter = 0;
31 bi.biClrUsed = 0;
32 bi.biClrImportant = 0;
33
34
35 //Set BITMAPFILEHEADER
36 bf.bfType = 0x4d42;
37 bf.bfSize = 54 + bi.biSizeImage;
38 bf.bfReserved = 0;
39 bf.bfOffBits = 54;
40
41 if(init_v4l2() == FALSE)
42 {
43 }
44
45 v4l2_grab();
46 yuyv_2_rgb888();
47 aa.append((char *)&bf,14);
48 aa.append((char *)&bi,40);
49 aa.append((char *)frame_buffer,640*480*3);
50 pix.loadFromData(aa);
51 ui->label->setPixmap(pix);
52 close_v4l2();
53 }
54
55 MainWindow::~MainWindow()
56 {
57 delete ui;
58 }
17~18行:
17 QPixmap pix;
18 QByteArray aa ;
定义了一个QPixmap类对象pix来显示图片;由于调用QPixmap类的loadFromData()函数来获取传递过来的图像数据,因此loadFromData()函数的详细信息可以在Qt的help->index中查找,或者从中查询:
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在标签上的显示。
4、编译项目
在项目路径中,使用命令
qmake -project
生成一个新的项目文件lab2_qt_camera.pro。重用
qmake
生成一个makefile文件,打开makefile文件查看
1 #############################################################################
2 # Makefile for building: lab2_qt_camera
3 # Generated by qmake (2.01a) (Qt 4.7.3) on: Sun Dec 23 02:24:47 2012
4 # Project: lab2_qt_camera.pro
5 # Template: app
6 # Command: /usr/local/Trolltech/Qt-4.7.3/bin/qmake -o Makefile lab2_qt_camera.pro
7 #############################################################################
8
9 ####### Compiler, tools and options
10
11 CC = ${CROSS_COMPILE}gcc
12 CXX = ${CROSS_COMPILE}g++
13 DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
14 CFLAGS = ${CROSS_COMPILE_CFLAGS} -I$(ZYNQ_QT_INSTALL)/include -DZYNQ -O2 -Wall -W -D_REENTRANT $(DEFINES)
15 CXXFLAGS = ${CROSS_COMPILE_CPPFLAGS} -I$(ZYNQ_QT_INSTALL)/include -DZYNQ -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 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.
17 LINK = ${CROSS_COMPILE}g++
18 LFLAGS = -L$(ZYNQ_QT_INSTALL)/lib -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/Qt-4.7.3/lib
19 LIBS = $(SUBLIBS) -L/usr/local/Trolltech/Qt-4.7.3//lib -lQtGui -L/usr/local/Trolltech/Qt-4.7.3//lib -lQtNetwork -lQtCore -lpthread
20 AR = ${CROSS_COMPILE}ar cqs
21 RANLIB =
22 QMAKE = /usr/local/Trolltech/Qt-4.7.3/bin/qmake
23 TAR = tar -cf
24 COMPRESS = gzip -9f
25 COPY = cp -f
26 SED = sed
27 COPY_FILE = $(COPY)
28 COPY_DIR = $(COPY) -r
29 STRIP = ${CROSS_COMPILE}strip
30 INSTALL_FILE = install -m 644 -p
31 INSTALL_DIR = $(COPY_DIR)
32 INSTALL_PROGRAM = install -m 755 -p
33 DEL_FILE = rm -f
34 SYMLINK = ln -f -s
35 DEL_DIR = rmdir
36 MOVE = mv -f
37 CHK_DIR_EXISTS= test -d
38 MKDIR = mkdir -p
39
40 ####### Output directory
41
42 OBJECTS_DIR = ./
43
44 ####### Files
45
46 SOURCES = main.cpp \
47 mainwindow.cpp \
48 v4l2grab.c moc_mainwindow.cpp
49 OBJECTS = main.o \
50 mainwindow.o \
51 v4l2grab.o \
52 moc_mainwindow.o#之后省略
使用的gcc是${CROSS_COMPILE}gcc,即arm-xilinx-linux-gnueabi-gcc,g++是${CROSS_COMPILE}g++,即arm-xilinx-linux-gnueabi-g++;因此,编译出来的可执行文件是可以在Zed上运行的。重用
make
生成可执行文件 lab2_qt_camera。
三、制作运行时库
由于ubuntu的Qt运行库在/usr/local/Trolltech/Qt-4.7.3/下,可以看到参考运行库是
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.
因此,如果您在ZedBoard 上运行编译后的可执行文件,您可能会尽早在相应路径中找到运行时文件。Xilinx给出了制作Qt运行时镜像的方法:切换到qt-everywhere-opensource-src-4.7.3.tar.gz的解压路径,在控制台输入
1 dd if=/dev/zero of=qt_lib_ext4.img bs=1M count=80
2 mkfs.ext4 -F qt_lib_ext4.img
3 chmod go+w qt_lib_ext4.img
4 mount qt_lib_ext4.img -o loop /mnt
5 cp -rf /usr/local/Trolltech/Qt-4.7.3/* /mnt
6 chmod go-w qt_lib_ext4.img
7 umount /mnt
就是这样。可以找到生成的库文件镜像文件qt_lib_ext4.img,挂载到
/usr/local/Trolltech/Qt-4.7.3/
就是这样。
四、ARM测试测试
1、硬件连接
需要使用USB*敏*感*词*、U盘、鼠标,所以使用USB HUB;同时,为了支持HDMI输出,需要连接一个HDMI显示器(可以用DVI,需要用HDMI转DVI,性价比更高;或者普通VGA,需要用HDMI转VGA ,这个成本比较低)。ZedBoard 硬件连接图:
2、挂载Qt运行库
在ZedBoard的linux文件系统中,创建一个目录
/usr/local/Trolltech/Qt-4.7.3/
用
mkdir
逐层创建目录的命令。并挂载 qt_lib_ext4.img 到
/usr/local/Trolltech/Qt-4.7.3/
下。
切换到
<br class="Apple-interchange-newline" data-filtered="filtered">/usr/local/Trolltech/Qt-4.7.3/
查看挂载结果的路径
3、运行
使用命令
./lab2_qt_camera -qws
运行可执行文件,可以看到输出信息:
同时在HDMI显示器上查看执行结果:
这样我们相机采集到的图像数据就通过QT显示在HDMI显示器上。
============================
Qt运行时库下载:
可执行文件下载: