- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用 Qt Creator 编译一个 Android 应用程序。我需要将 OpenCV 集成到其中,我花了半天时间才正确配置它,所以我想在这里记录下我采取的步骤,以防其他人必须这样做。
最佳答案
编辑:对于 OpenCV 4.x,请参阅下面的答案。我的答案仅在 OpenCV 2.4 上进行了测试。
原答案:
首先,我下载了OpenCV-2.4.10-android-sdk ,并放入我的项目目录。它包含静态库,and link order matters for static libraries for GCC .所以你需要这样订购它们。这就是我的 .pro 文件最后的样子($$_PRO_FILE_PWD_ 指的是项目目录):
INCLUDEPATH += "$$_PRO_FILE_PWD_/OpenCV-2.4.10-android-sdk/sdk/native/jni/include"
android {
LIBS += \
-L"$$_PRO_FILE_PWD_/OpenCV-2.4.10-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a"\
-L"$$_PRO_FILE_PWD_/OpenCV-2.4.10-android-sdk/sdk/native/libs/armeabi-v7a"\
-llibtiff\
-llibjpeg\
-llibjasper\
-llibpng\
-lIlmImf\
-ltbb\
-lopencv_core\
-lopencv_androidcamera\
-lopencv_flann\
-lopencv_imgproc\
-lopencv_highgui\
-lopencv_features2d\
-lopencv_calib3d\
-lopencv_ml\
-lopencv_objdetect\
-lopencv_video\
-lopencv_contrib\
-lopencv_photo\
-lopencv_java\
-lopencv_legacy\
-lopencv_ocl\
-lopencv_stitching\
-lopencv_superres\
-lopencv_ts\
-lopencv_videostab
ANDROID_PACKAGE_SOURCE_DIR=$$_PRO_FILE_PWD_/android
}
之后该项目将编译但将无法运行并出现错误
E/AndroidRuntime(11873): java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]: 176 could not load needed library 'libopencv_java.so' for 'libMyProject.so' (load_library[1093]: Library 'libopencv_java.so' not found)
要克服这个问题,您需要 add libopencv_java.so to your APK ,然后从 QtActivity.java 手动加载它。这就是末尾的 ANDROID_PACKAGE_SOURCE_DIR=$$_PRO_FILE_PWD_/android
行的用途。现在您需要将 libopencv_java.so 放在这里:
project_root/android/libs/armeabi-v7a/libopencv_java.so
project_root/android/src/org/qtproject/qt5/android/bindings/QtActivity.java
您可以从 Android 目标构建目录获取 QtActivity.java,在我的例子中完整路径是 c:\Workspace\build-MyProject-Android_for_armeabi_v7a_GCC_4_9_Qt_5_4_0-Debug\android-build\src\org\qtproject\qt5\android\bindings\QtActivity.java
,复制即可。
然后你在里面找到那些行:
// now load the application library so it's accessible from this class loader
if (libName != null)
System.loadLibrary(libName);
然后在它们之前加载libopencv_java.so
,这样它们就变成了:
// This is needed for OpenCV!!!
System.loadLibrary("opencv_java");
// now load the application library so it's accessible from this class loader
if (libName != null)
System.loadLibrary(libName);
请注意,您将 opencv_java
传递给 System.loadLibrary()
,即使文件是 libopencv_java.so
。
编辑: 我忘了说了,但是当我尝试运行 OpenCV-2.4.10-android-sdk 附带的示例之一时,我已经在我的手机上安装了 OpenCV 管理器,所以我不知道有没有必要。无论如何,请记住,如果在我的步骤之后它仍然失败,您可能需要下载 OpenCV 管理器(它可以在 Google 商店中获得)。
编辑 2:我正在使用 adt-bundle-windows-x86-20140702、android-ndk-r10d、OpenCV-2.4.10-android-sdk、Qt Creator 3.3.0 和我的构建目标是“Android for armeabi-v7a (GCC 4.9, Qt 5.4.0)”。
编辑 3: 来自 Daniel Saner's comment :
In OpenCV 3.x, opencv_java has been renamed to opencv_java3. Also, while I didn't look into the specific changes that might have effected this, the workaround regarding that library in the final step seems to no longer be necessary. The app compiles and runs without the ANDROID_PACKAGE_SOURCE_DIR line
编辑4:@myk的评论:
Worked for me with OpenCV 3.2. To workaround the build issues with carotene finish the LIBS+ section with: -lopencv_videostab\ -ltegra_hal\ – myk 2 hours ago
关于android - 如何将 OpenCV 集成到 Qt Creator Android 项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951005/
我正在尝试将 Parcelable 数据从一个 Intent 传递到另一个 Intent ,这是我得到的错误: 08-31 14:12:22.709: E/AndroidRuntime(9931):
我收到错误消息“Parcelable 协议(protocol)需要一个在类上名为 CREATOR 的 Parcelable.Creator 对象......”,但我确实有一个 Creator,但我不知
我喜欢 Qt Creator 中的深色“FakeVim”配色方案。然而,它只会使编辑器部分变暗,而其他一切都保持正常,这有点令人不安。有没有办法让 Qt Creator 全局使用这种黑暗方案? Vim
Qt Creator 中是否可以有构建后事件(如在 VC++ 中)?特别是,我想在构建可执行文件后将其复制到另一个文件夹。可以吗? 最佳答案 添加执行脚本以复制文件作为构建步骤,如下所示, 关于qt-
有没有办法在 Qt Creator 中获取打开文档的列表。 有时当 Qt Creator 崩溃并且在重新打开时无法恢复 session 时,在它崩溃之前有一个打开的文件列表会很方便。 最佳答案 不确定
Qt 似乎不像其他 IDE 通常那样在文件夹中构建文件,例如 netbeans 将头文件放在头文件夹中,将源文件放在源文件夹中等等。我已经看到这是在 Qt 中完成的,但我不知道为什么它不在我的电脑上。
我正在尝试创建一个 2 的上标,以显示用户在我的对话框中提供的字段之后的单位标签的平方。我在 Windows 上使用 Qt Creator v2.0.1。 QLabel 有一个文本字段和一个 text
我正在尝试更改 QT Creator 中的构建输出目录(即,我想输出到 ../../bin/debug 而不是输出到 ./debug)。我尝试通过项目模式编辑构建输出目录,但它是只读的。查看 .pro
如何在 QT Creator 中仅编译项目中的一个文件。 有快捷键吗? 例如,在 VS 中,您可以按 Ctrl F7 并编译当前的 cpp 文件。 最佳答案 现在可以做到这一点,至少是 Qt Crea
使用 Qt Creator 的 Memcheck 功能返回以下内容: valgrind: Bad option: --xml=yes, but no XML destination specified
我通常使用带有 cmake 的 Qt creator 来编程 C++ 项目。最近我读了很多关于介子的书,它很简单,我喜欢测试它。 This示例解释了如何设置介子。 在使用介子时,我仍然喜欢使用 Qt
我刚刚在我的机器上构建并安装了 QtQuick3D。我运行示例项目“立方体”。 它有效,我可以构建和执行它。它向我展示了一个可以用鼠标旋转的立方体。但是在 QML 编辑器中,我在所有 Viewport
作为一名已转向 Linux 的老 Borland C++ Bulder 程序员,我很高兴找到 QT 和 QT Creator。 但是我遇到了第一个障碍:我设计了一个带有一些控件的表单,并添加了一个菜单
Visual Assist X 为 Visual Studio 提供了一个很好的功能,称为 column indicator 。它在文本编辑器中的指定列上显示一条垂直线(我使用第 80 列)。这可以帮
这看起来应该很简单,但似乎没有一种方法可以像人们期望的那样做到这一点。 我在 qt Creator 中打开了两个单独的 C++ 项目,我想针对另一个项目中的一个项目进行包含/编译。 这是我的布局: p
问题: Qt Creator 是用 Qt Creator 构建的吗? 同样,Qt Designer 是用 Qt Designer 构建的吗? 顺便说一句,为什么有两个 Qt IDE?他们是竞争对手吗?
我坐在带有 Qt Creator v2.7 的 Ubuntu 12.04(也尝试过新版本,2.8 测试版)中,当我创建一个非 Qt 项目/普通 C++ 项目(CMake Build)时,一切似乎都很好
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: How to get Qt Creator to work with CDB? 我正在尝试将 Cdb 与 Qt C
Qt Creator 通常将注释着色为绿色,但我在 Qt 示例中看到了蓝色注释,而且 Qt Creator 似乎将所有以 //! 开头的注释着色为蓝色。 这是一个示例屏幕截图: 这是某种约定吗?蓝色代
我刚刚从英语下载站点http://qt.nokia.com/downloads上,在我的英语Windows 7系统上下载并安装了Qt Creator 1.3.1,显然,尽管帮助文件是英语,但Qt Cr
我是一名优秀的程序员,十分优秀!