我的Ubuntu安装使用openCV记录(3)——for QT

27 篇文章 36 订阅
16 篇文章 0 订阅

博主QQ:1356438802

QQ群:473383394——UVC&OpenCV47



本文实验平台:ubuntu12.04虚拟机 + opencv 2.4.10 + QT Creator 2.4.1 + QT 4.8.1(64bits)


经过前面两篇文章的实验,我们已经能够在ubuntu下成功使用opencv 简单的程序预览usb camera的图像,接下来我要把《win7_64bits下QT使用openCV库(3)》文章中的例程移植到Ubuntu平台中使用,实现预览、拍照、录像功能。


关于Ubuntu下的QT环境搭建,请自行查找资料,基本上"sudo apt-get install qtcreator",就能安装完成,不过这样自动安装的qtlib版本一般较低,像我现在就是qt 4.8.1。如果需要更高版本的lib,还要另外安装!


好,开始工作!

把testOpenCV_preview2工程拷贝到"Z:\QT_workspace"目录下,删除工程下的testOpenCV_preview2.pro.user文件,然后用qtcreator打开工程。接下来我们需要修改.pro文件,让工程能够找到Ubuntu的opencv相关文件。

common.pri

#lib库其他目录
OPENCV_DIR = /usr/local
OPENCV_INCDIR = $$OPENCV_DIR/include
OPENCV_BINDIR = $$OPENCV_DIR/bin
OPENCV_LIBDIR = $$OPENCV_DIR/lib

testOpenCV_preview2.pro

#-------------------------------------------------
#
# Project created by QtCreator 2016-07-07T14:39:53
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = testOpenCV_preview
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


message("start include opencv INCLUDE and LIBS")
include (common.pri)


unix {

message("linux include opencv INCLUDE and LIBS")
INCLUDEPATH+=   $$OPENCV_INCDIR/opencv \
                $$OPENCV_INCDIR/opencv2


LIBS+=	$$OPENCV_LIBDIR/libopencv_calib3d.so	\
	$$OPENCV_LIBDIR/libopencv_contrib.so	\
	$$OPENCV_LIBDIR/libopencv_core.so	\
	$$OPENCV_LIBDIR/libopencv_features2d.so	\
	$$OPENCV_LIBDIR/libopencv_flann.so	\
	$$OPENCV_LIBDIR/libopencv_gpu.so	\
	$$OPENCV_LIBDIR/libopencv_highgui.so	\
	$$OPENCV_LIBDIR/libopencv_imgproc.so	\
	$$OPENCV_LIBDIR/libopencv_legacy.so	\
	$$OPENCV_LIBDIR/libopencv_ml.so	\
	$$OPENCV_LIBDIR/libopencv_nonfree.so	\
	$$OPENCV_LIBDIR/libopencv_objdetect.so	\
	$$OPENCV_LIBDIR/libopencv_ocl.so	\
	$$OPENCV_LIBDIR/libopencv_photo.so	\
	$$OPENCV_LIBDIR/libopencv_stitching.so	\
	$$OPENCV_LIBDIR/libopencv_superres.so	\
	$$OPENCV_LIBDIR/libopencv_video.so	\
	$$OPENCV_LIBDIR/libopencv_videostab.so
}


RESOURCES += \
    img.qrc

源码不需要做任何修改,因为opencv本身就是跨平台的开源库,Unix / Linux / MacOS / Android / Windows都可以使用。


完了"run qmake",生成makefile,然后"build project",编译成功,马上运行,看看效果如何:

软件启动



打开摄像头



跟前一篇文章main.cpp的效果一样,但是跟windows下testOpenCV_preview2的效果相比差远了!而且录制的视频也是同样锯齿化的色块。两个平台下frame的大小都是640x480,最终画面却不同!

具体原因暂不追究。


思考点:

1. usb camera 640x480分辨率在三个平台的预览效果



2. 运行testOpenCV_preview2这个工程时,如果第二次"Open Camera",会出现Camera初始化失败,没有找到一种有效的视频格式,这个问题和《我的Opencv4Android添加V4L2支持的移植记录(2)》文章中描述的第三个问题是同一个问题!

因为windows和linux(Android和Ubuntu都是Linux类系统)对usb camera的支持框架是不同的,windows下DirectShow表现正常,而Android和Ubuntu下V4L2现在表现出同样的问题,这个必须查清楚!

usb camera 在三个平台的第二次Open的情况



3. QT + OpenCV(或者其他开源库),这种搭配框架对于有很强跨平台需求的项目是非常非常好的选择!


4. 将testOpenCV_preview2工程在windows和Ubuntu,两个平台的.pro文件相结合,我们就知道一个真正跨平台的工程,应该怎么构建,.pro文件应该怎么书写了!


5. 在目录下打开makefile文件看看

其中

INCPATH       = -I/usr/share/qt4/mkspecs/linux-g++ -I../testOpenCV_preview -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/local/include/opencv -I/usr/local/include/opencv2 -I. -I. -I../testOpenCV_preview -I.

LIBS          = $(SUBLIBS)  -L/usr/lib/x86_64-linux-gnu /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_ocl.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so -lQtGui -lQtCore -lpthread 

和我们前面讲的是一致的,只要把头文件和lib指定出来,就可以基本编译通过!


makefile内容

#############################################################################
# Makefile for building: testOpenCV_preview
# Generated by qmake (2.01a) (Qt 4.8.1) on: Mon Jul 4 20:06:24 2016
# Project:  ../testOpenCV_preview/testOpenCV_preview2.pro
# Template: app
# Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug CONFIG+=declarative_debug -o Makefile ../testOpenCV_preview/testOpenCV_preview2.pro
#############################################################################

####### Compiler, tools and options

CC            = gcc
CXX           = g++
DEFINES       = -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS        = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS      = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
INCPATH       = -I/usr/share/qt4/mkspecs/linux-g++ -I../testOpenCV_preview -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/local/include/opencv -I/usr/local/include/opencv2 -I. -I. -I../testOpenCV_preview -I.
LINK          = g++
LFLAGS        = 
LIBS          = $(SUBLIBS)  -L/usr/lib/x86_64-linux-gnu /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_ocl.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so -lQtGui -lQtCore -lpthread 
AR            = ar cqs
RANLIB        = 
QMAKE         = /usr/bin/qmake-qt4
TAR           = tar -cf
COMPRESS      = gzip -9f
COPY          = cp -f
SED           = sed
COPY_FILE     = $(COPY)
COPY_DIR      = $(COPY) -r
STRIP         = strip
INSTALL_FILE  = install -m 644 -p
INSTALL_DIR   = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE      = rm -f
SYMLINK       = ln -f -s
DEL_DIR       = rmdir
MOVE          = mv -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p

####### Output directory

OBJECTS_DIR   = ./

####### Files

SOURCES       = ../testOpenCV_preview/main.cpp \
		../testOpenCV_preview/mainwindow.cpp moc_mainwindow.cpp \
		qrc_img.cpp
OBJECTS       = main.o \
		mainwindow.o \
		moc_mainwindow.o \
		qrc_img.o
DIST          = /usr/share/qt4/mkspecs/common/unix.conf \
		/usr/share/qt4/mkspecs/common/linux.conf \
		/usr/share/qt4/mkspecs/common/gcc-base.conf \
		/usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
		/usr/share/qt4/mkspecs/common/g++-base.conf \
		/usr/share/qt4/mkspecs/common/g++-unix.conf \
		/usr/share/qt4/mkspecs/qconfig.pri \
		/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
		/usr/share/qt4/mkspecs/features/qt_functions.prf \
		/usr/share/qt4/mkspecs/features/qt_config.prf \
		/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
		/usr/share/qt4/mkspecs/features/default_pre.prf \
		../testOpenCV_preview/common.pri \
		/usr/share/qt4/mkspecs/features/debug.prf \
		/usr/share/qt4/mkspecs/features/default_post.prf \
		/usr/share/qt4/mkspecs/features/declarative_debug.prf \
		/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
		/usr/share/qt4/mkspecs/features/warn_on.prf \
		/usr/share/qt4/mkspecs/features/qt.prf \
		/usr/share/qt4/mkspecs/features/unix/thread.prf \
		/usr/share/qt4/mkspecs/features/moc.prf \
		/usr/share/qt4/mkspecs/features/resources.prf \
		/usr/share/qt4/mkspecs/features/uic.prf \
		/usr/share/qt4/mkspecs/features/yacc.prf \
		/usr/share/qt4/mkspecs/features/lex.prf \
		/usr/share/qt4/mkspecs/features/include_source_dir.prf \
		../testOpenCV_preview/testOpenCV_preview2.pro
QMAKE_TARGET  = testOpenCV_preview
DESTDIR       = 
TARGET        = testOpenCV_preview

first: all
####### Implicit rules

.SUFFIXES: .o .c .cpp .cc .cxx .C

.cpp.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cc.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cxx.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.C.o:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.c.o:
	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"

####### Build rules

all: Makefile $(TARGET)

$(TARGET): ui_mainwindow.h $(OBJECTS)  
	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
	{ test -n "$(DESTDIR)" && DESTDIR="$(DESTDIR)" || DESTDIR=.; } && test $$(gdb --version | sed -e 's,[^0-9]\+\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $$DESTDIR" -ex quit '$(TARGET)' && test -f $(TARGET).gdb-index && objcopy --add-section '.gdb_index=$(TARGET).gdb-index' --set-section-flags '.gdb_index=readonly' '$(TARGET)' '$(TARGET)' && rm -f $(TARGET).gdb-index || true

Makefile: ../testOpenCV_preview/testOpenCV_preview2.pro  /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
		/usr/share/qt4/mkspecs/common/linux.conf \
		/usr/share/qt4/mkspecs/common/gcc-base.conf \
		/usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
		/usr/share/qt4/mkspecs/common/g++-base.conf \
		/usr/share/qt4/mkspecs/common/g++-unix.conf \
		/usr/share/qt4/mkspecs/qconfig.pri \
		/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
		/usr/share/qt4/mkspecs/features/qt_functions.prf \
		/usr/share/qt4/mkspecs/features/qt_config.prf \
		/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
		/usr/share/qt4/mkspecs/features/default_pre.prf \
		../testOpenCV_preview/common.pri \
		/usr/share/qt4/mkspecs/features/debug.prf \
		/usr/share/qt4/mkspecs/features/default_post.prf \
		/usr/share/qt4/mkspecs/features/declarative_debug.prf \
		/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
		/usr/share/qt4/mkspecs/features/warn_on.prf \
		/usr/share/qt4/mkspecs/features/qt.prf \
		/usr/share/qt4/mkspecs/features/unix/thread.prf \
		/usr/share/qt4/mkspecs/features/moc.prf \
		/usr/share/qt4/mkspecs/features/resources.prf \
		/usr/share/qt4/mkspecs/features/uic.prf \
		/usr/share/qt4/mkspecs/features/yacc.prf \
		/usr/share/qt4/mkspecs/features/lex.prf \
		/usr/share/qt4/mkspecs/features/include_source_dir.prf \
		/usr/lib/x86_64-linux-gnu/libQtGui.prl \
		/usr/lib/x86_64-linux-gnu/libQtCore.prl
	$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug CONFIG+=declarative_debug -o Makefile ../testOpenCV_preview/testOpenCV_preview2.pro
/usr/share/qt4/mkspecs/common/unix.conf:
/usr/share/qt4/mkspecs/common/linux.conf:
/usr/share/qt4/mkspecs/common/gcc-base.conf:
/usr/share/qt4/mkspecs/common/gcc-base-unix.conf:
/usr/share/qt4/mkspecs/common/g++-base.conf:
/usr/share/qt4/mkspecs/common/g++-unix.conf:
/usr/share/qt4/mkspecs/qconfig.pri:
/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri:
/usr/share/qt4/mkspecs/features/qt_functions.prf:
/usr/share/qt4/mkspecs/features/qt_config.prf:
/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
/usr/share/qt4/mkspecs/features/default_pre.prf:
../testOpenCV_preview/common.pri:
/usr/share/qt4/mkspecs/features/debug.prf:
/usr/share/qt4/mkspecs/features/default_post.prf:
/usr/share/qt4/mkspecs/features/declarative_debug.prf:
/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
/usr/share/qt4/mkspecs/features/warn_on.prf:
/usr/share/qt4/mkspecs/features/qt.prf:
/usr/share/qt4/mkspecs/features/unix/thread.prf:
/usr/share/qt4/mkspecs/features/moc.prf:
/usr/share/qt4/mkspecs/features/resources.prf:
/usr/share/qt4/mkspecs/features/uic.prf:
/usr/share/qt4/mkspecs/features/yacc.prf:
/usr/share/qt4/mkspecs/features/lex.prf:
/usr/share/qt4/mkspecs/features/include_source_dir.prf:
/usr/lib/x86_64-linux-gnu/libQtGui.prl:
/usr/lib/x86_64-linux-gnu/libQtCore.prl:
qmake:  FORCE
	@$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug CONFIG+=declarative_debug -o Makefile ../testOpenCV_preview/testOpenCV_preview2.pro

dist: 
	@$(CHK_DIR_EXISTS) .tmp/testOpenCV_preview1.0.0 || $(MKDIR) .tmp/testOpenCV_preview1.0.0 
	$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/testOpenCV_preview1.0.0/ && $(COPY_FILE) --parents ../testOpenCV_preview/mainwindow.h .tmp/testOpenCV_preview1.0.0/ && $(COPY_FILE) --parents ../testOpenCV_preview/img.qrc .tmp/testOpenCV_preview1.0.0/ && $(COPY_FILE) --parents ../testOpenCV_preview/main.cpp ../testOpenCV_preview/mainwindow.cpp .tmp/testOpenCV_preview1.0.0/ && $(COPY_FILE) --parents ../testOpenCV_preview/mainwindow.ui .tmp/testOpenCV_preview1.0.0/ && (cd `dirname .tmp/testOpenCV_preview1.0.0` && $(TAR) testOpenCV_preview1.0.0.tar testOpenCV_preview1.0.0 && $(COMPRESS) testOpenCV_preview1.0.0.tar) && $(MOVE) `dirname .tmp/testOpenCV_preview1.0.0`/testOpenCV_preview1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/testOpenCV_preview1.0.0


clean:compiler_clean 
	-$(DEL_FILE) $(OBJECTS)
	-$(DEL_FILE) *~ core *.core


####### Sub-libraries

distclean: clean
	-$(DEL_FILE) $(TARGET) 
	-$(DEL_FILE) Makefile


check: first

mocclean: compiler_moc_header_clean compiler_moc_source_clean

mocables: compiler_moc_header_make_all compiler_moc_source_make_all

compiler_moc_header_make_all: moc_mainwindow.cpp
compiler_moc_header_clean:
	-$(DEL_FILE) moc_mainwindow.cpp
moc_mainwindow.cpp: ../testOpenCV_preview/mainwindow.h
	/usr/bin/moc-qt4 $(DEFINES) $(INCPATH) ../testOpenCV_preview/mainwindow.h -o moc_mainwindow.cpp

compiler_rcc_make_all: qrc_img.cpp
compiler_rcc_clean:
	-$(DEL_FILE) qrc_img.cpp
qrc_img.cpp: ../testOpenCV_preview/img.qrc \
		../testOpenCV_preview/pic/desktop.jpg
	/usr/bin/rcc -name img ../testOpenCV_preview/img.qrc -o qrc_img.cpp

compiler_image_collection_make_all: qmake_image_collection.cpp
compiler_image_collection_clean:
	-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all: ui_mainwindow.h
compiler_uic_clean:
	-$(DEL_FILE) ui_mainwindow.h
ui_mainwindow.h: ../testOpenCV_preview/mainwindow.ui
	/usr/bin/uic-qt4 ../testOpenCV_preview/mainwindow.ui -o ui_mainwindow.h

compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_uic_clean 

####### Compile

main.o: ../testOpenCV_preview/main.cpp ../testOpenCV_preview/mainwindow.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../testOpenCV_preview/main.cpp

mainwindow.o: ../testOpenCV_preview/mainwindow.cpp ui_mainwindow.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o ../testOpenCV_preview/mainwindow.cpp

moc_mainwindow.o: moc_mainwindow.cpp 
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp

qrc_img.o: qrc_img.cpp 
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_img.o qrc_img.cpp

####### Install

install:   FORCE

uninstall:   FORCE

FORCE:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值