初学Opencv的认识一些经验总结

本文介绍了作者手动编译OpenCV库以在iOS和Android平台上使用的过程,包括在Mac上编译opencv.framework,解决Objective-C调用C++的问题,以及在Android上编译静态库并创建SO文件的步骤。文章还探讨了OpenCV Android SDK的结构,指出如何避免依赖OpencvManager.apk,以减少用户额外安装的需求。
摘要由CSDN通过智能技术生成

在很久很久以前,那时候还是个学生,就说过opencv,不过没接触。


工作了几年后,也一直没接触这个方面的东西。


以为此前玩过ffmpeg,简单的搞搞过。


所以在玩opencv之前也想过这个东西,后来听说opencv都要下载一个apk,android才能玩,有点郁闷。


不过自从接触ffmpeg后,我感觉很多开源软件都遵循一个规律,那就是对源码的绝对自由。所以很多开发者说opencv需要装个apk才能玩这样的说法不是很靠谱。


因为最近在ios上作开发,当然了ios有opencv2的framework,但是本人还是下载了OPENCV的源代码来编译。


经过安装ninja什么的,最终还是搞定了安装,在mac下成功编译出了opencv.framework。然后ios就可以开发了。遇到一些坑,就是opencv用的c++,objective c要调用需要修改.m为mm。


搞定了ios的项目后,现在来折腾android的。



第一步:肯定就是用源码编译出android需要的库文件(最后编译出了一些静态的.a文件)。我用的3.1.0版本的opencv。

第二步:当然就是把.a放到项目和本地的JNI文件编译出so库了。

这个过程遇到很多坑,比如编译不成功什么的。主要脚本写的不对。

android.mk应该如下类似:


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC

include /Users/lunil-air/Downloads/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE :=opencv_test
LOCAL_SRC_FILES :=opencv_about/jni_part.cpp
LOCAL_CXXFLAGS   += -fno-exceptions
LOCAL_LDLIBS += -lGLESv2 -lEGL -ldl -llog -landroid -lm
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include 

include $(BUILD_SHARED_LIBRARY)


application.mk 应该类似如下:

APP_ABI := armeabi-v7a
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions

因为opencv需要C++编译器,所以你的测试文件最好不要用.c,我就是因为用点c花了一些时间。还有就是APP_STL这里一定好对应上面的。

到此!其实库都可以编译了。


但是!我说的是OPENCV的库确实可以调用了,但是android的话要跑java层,你不至于自己写jni接口传输Mat这样的数据哈。那工作量就太大了。


iOS就没有这个问题,因为oc可以直接调用c++。


于是我看了下opencv给的demo,知道了其实opencv的android sdk分为几个部分。


sample (代码)

Opencv Library(java api封装)。

OpencvManager.apk。


其实逻辑是这样的:sample代码调用opencv Library,而opencv Library调用 OpencvManger.apk里面的so。

所以啊,你运行一个sample就需要opencvmanger.apk,否则无法运行。opencvManger.apk里面最重要的一个库是opencv_java.so。很明显吧?这个就是open library里面的各种jni数据封装。


如果你自己有能力,完全可以自己封装数据结构,类似Opencv Library,这样就不用调用opencvManger.apk了,因为用户需要安装这个感觉很坑。


还有一种办法就是我们的sample 去掉与opencvManger.apk连接通信的相关代码,然后把opencv Libarary和opencv_java.so放到项目,不就摆脱了opencvManger.apk的控制了吗?


答案却是如此。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了悟生死大事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值