如何将 QT 5.2.0 (win7 x86) 与 OpenCV2.4.6 和 Android 集成
Posted
技术标签:
【中文标题】如何将 QT 5.2.0 (win7 x86) 与 OpenCV2.4.6 和 Android 集成【英文标题】:How to integrate QT 5.2.0 (win7 x86) with OpenCV2.4.6 and Android 【发布时间】:2013-10-28 22:36:44 【问题描述】:我正在尝试将 win7 (32b) 中的 QT5.2.0 beta 1 与 opencv 和 android 集成以进行原生 c++ 开发。 不幸的是我没能成功。 (此外,我也尝试过 necessitas 但没有运气。) 应用程序可以在桌面上运行,但是当我尝试为 android 工具包(x86 或 arm7s)编译时 我在构建过程中收到与“lopencv_highgui.a”相关的错误,例如
“C:/OpenCV-2.4.6-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_highgui.a(grfmt_exr.cpp.o): 在函数cv::ExrDecoder::ExrDecoder()':grfmt_exr.cpp:(.text._ZN2cv10ExrDecoderC2Ev+0x82): undefined reference to
Imf::Chromaticities::Chromaticities (Imath::Vec2 const&, Imath::Vec2 const&, Imath::Vec2 const&, Imath::Vec2 const&)'"
我使用了带有几个 NDK(r8b、r8e、r9)版本的清晰设置
“C:\adt-bundle-windows-x86-20130917”(托管 API 16、17、18) "C:\apache-ant-1.9.2\bin\ant.bat" "C:\Program Files (x86)\Java\jdk1.7.0_45"(在系统环境变量中设置JAVA_HOME) "C:\OpenCV-2.4.6-android-sdk" & ""C:\OpenCV-2.4.6" “C:\Qt\Qt5.2.0\5.2.0-beta1\mingw48_32”(sys.env.vars 中的 QTDIR。)我尝试了以下解决方案
我按照定义重新排序了 pro 文件中的 opencv 库。 我检查了 sh.exe 是否存在(不存在) 我将 tools.jar 从 jdk 复制到“C:\Program Files (x86)\Java\jre7\lib”文件夹我将 Genymotion 用于带有 NEXUS S 4.2.2 x86 (API17) 和 Galaxy Nexus 4.1.1 x86 (API16) 的虚拟 android 环境。
我可以在模拟器上编译、部署和运行一些 Qt 示例(没有 Opengls 和没有 opencv),但我无法在简单的 opencv 应用程序上取得任何成功。 (PS:该应用程序正在桌面上运行)
我想我需要一个简单的运行 Qt opencv android 示例,具有正确的 pro、user 和其他配置,以找到正确的解决方案并定义错误。
谁能分享一个工作样本?
【问题讨论】:
添加您的 .pro 文件。所有这些部署信息都与这个问题无关。 (因为你在构建过程中被卡住了) 您可以从以下链接下载项目:dl.dropboxusercontent.com/u/69950201/simpleCV.zip 您对 *** 读者的要求太多了 :) 将相关内容添加到帖子中。 亲爱的弗兰克,我试图粘贴专业文件的内容,但评论字段不接受大小,所以我将其包含在 zip 文件中(与项目一起)并附上链接。有没有其他方法可以粘贴内容?我还把 pro 上传到了 pastebin --> pastebin.ca/2472563 How to integrate OpenCV into Qt Creator Android project的可能重复 【参考方案1】:由于 pro 文件 (libIlmImf.a) 中缺少库定义而出现此问题。
更正后的 pro 文件中的库定义如下:
ANDROID_OPENCV = C:/OpenCV-2.4.6-android-sdk/sdk/native
LIBS += \
$$ANDROID_OPENCV/libs/x86/libopencv_contrib.a \
$$ANDROID_OPENCV/libs/x86/libopencv_legacy.a \
$$ANDROID_OPENCV/libs/x86/libopencv_ml.a \
$$ANDROID_OPENCV/libs/x86/libopencv_objdetect.a \
$$ANDROID_OPENCV/libs/x86/libopencv_calib3d.a \
$$ANDROID_OPENCV/libs/x86/libopencv_video.a \
$$ANDROID_OPENCV/libs/x86/libopencv_features2d.a \
$$ANDROID_OPENCV/libs/x86/libopencv_highgui.a \
$$ANDROID_OPENCV/libs/x86/libopencv_androidcamera.a \
$$ANDROID_OPENCV/libs/x86/libopencv_flann.a \
$$ANDROID_OPENCV/libs/x86/libopencv_imgproc.a \
$$ANDROID_OPENCV/libs/x86/libopencv_core.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/libIlmImf.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibpng.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibtiff.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibjpeg.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibjasper.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/libtbb.a
(但在android模拟器中运行时出现另一个问题,由“着色器程序未链接”引起。我仍在努力,但这是另一个问题的问题)
编辑:我通过将模拟器从 GenyMotion 切换到 AVD(NEXUS S,API17,w/o googleapi,x86)并设置“使用主机 GPU”解决了“着色器程序未链接”的问题标记并将 CONFIG+= opengl 添加到 pro 文件
【讨论】:
以上是关于如何将 QT 5.2.0 (win7 x86) 与 OpenCV2.4.6 和 Android 集成的主要内容,如果未能解决你的问题,请参考以下文章
x86下 linux qt检测U盘插拔------- HAL 与UDISKS
如何在 Qt 应用程序中生成按键事件到系统(win7)(模拟用户在键盘上按键)?