u采 采集(Qt的下载和安装关于Linux的安装,你了解多少?)

优采云 发布时间: 2021-10-27 11:19

  u采 采集(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运行时库下载:

  可执行文件下载:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线