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

来源:互联网 发布:平板splashtop优化 编辑:程序博客网 时间:2024/05/17 22:37

博主QQ:1356438802


本文实验平台: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/localOPENCV_INCDIR = $$OPENCV_DIR/includeOPENCV_BINDIR = $$OPENCV_DIR/binOPENCV_LIBDIR = $$OPENCV_DIR/lib

testOpenCV_preview2.pro

#-------------------------------------------------## Project created by QtCreator 2016-07-07T14:39:53##-------------------------------------------------QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = testOpenCV_previewTEMPLATE = appSOURCES += main.cpp\        mainwindow.cppHEADERS  += mainwindow.hFORMS    += mainwindow.uimessage("start include opencv INCLUDE and LIBS")include (common.pri)unix {message("linux include opencv INCLUDE and LIBS")INCLUDEPATH+=   $$OPENCV_INCDIR/opencv \                $$OPENCV_INCDIR/opencv2LIBS+=$$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 optionsCC            = gccCXX           = g++DEFINES       = -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHAREDCFLAGS        = -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 cqsRANLIB        = QMAKE         = /usr/bin/qmake-qt4TAR           = tar -cfCOMPRESS      = gzip -9fCOPY          = cp -fSED           = sedCOPY_FILE     = $(COPY)COPY_DIR      = $(COPY) -rSTRIP         = stripINSTALL_FILE  = install -m 644 -pINSTALL_DIR   = $(COPY_DIR)INSTALL_PROGRAM = install -m 755 -pDEL_FILE      = rm -fSYMLINK       = ln -f -sDEL_DIR       = rmdirMOVE          = mv -fCHK_DIR_EXISTS= test -dMKDIR         = mkdir -p####### Output directoryOBJECTS_DIR   = ./####### FilesSOURCES       = ../testOpenCV_preview/main.cpp \../testOpenCV_preview/mainwindow.cpp moc_mainwindow.cpp \qrc_img.cppOBJECTS       = main.o \mainwindow.o \moc_mainwindow.o \qrc_img.oDIST          = /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.proQMAKE_TARGET  = testOpenCV_previewDESTDIR       = TARGET        = testOpenCV_previewfirst: 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 rulesall: 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 || trueMakefile: ../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.prodist: @$(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.0clean:compiler_clean -$(DEL_FILE) $(OBJECTS)-$(DEL_FILE) *~ core *.core####### Sub-librariesdistclean: clean-$(DEL_FILE) $(TARGET) -$(DEL_FILE) Makefilecheck: firstmocclean: compiler_moc_header_clean compiler_moc_source_cleanmocables: compiler_moc_header_make_all compiler_moc_source_make_allcompiler_moc_header_make_all: moc_mainwindow.cppcompiler_moc_header_clean:-$(DEL_FILE) moc_mainwindow.cppmoc_mainwindow.cpp: ../testOpenCV_preview/mainwindow.h/usr/bin/moc-qt4 $(DEFINES) $(INCPATH) ../testOpenCV_preview/mainwindow.h -o moc_mainwindow.cppcompiler_rcc_make_all: qrc_img.cppcompiler_rcc_clean:-$(DEL_FILE) qrc_img.cppqrc_img.cpp: ../testOpenCV_preview/img.qrc \../testOpenCV_preview/pic/desktop.jpg/usr/bin/rcc -name img ../testOpenCV_preview/img.qrc -o qrc_img.cppcompiler_image_collection_make_all: qmake_image_collection.cppcompiler_image_collection_clean:-$(DEL_FILE) qmake_image_collection.cppcompiler_moc_source_make_all:compiler_moc_source_clean:compiler_uic_make_all: ui_mainwindow.hcompiler_uic_clean:-$(DEL_FILE) ui_mainwindow.hui_mainwindow.h: ../testOpenCV_preview/mainwindow.ui/usr/bin/uic-qt4 ../testOpenCV_preview/mainwindow.ui -o ui_mainwindow.hcompiler_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 ####### Compilemain.o: ../testOpenCV_preview/main.cpp ../testOpenCV_preview/mainwindow.h$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../testOpenCV_preview/main.cppmainwindow.o: ../testOpenCV_preview/mainwindow.cpp ui_mainwindow.h$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o ../testOpenCV_preview/mainwindow.cppmoc_mainwindow.o: moc_mainwindow.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cppqrc_img.o: qrc_img.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_img.o qrc_img.cpp####### Installinstall:   FORCEuninstall:   FORCEFORCE:


0 0