VS2019 OpenCV的Windows工程到安卓的移植

本文详细介绍了如何将一个基于VS2019和OpenCV的Windows项目移植到Android平台,通过创建C++安卓.so项目,利用NDK编译,并在Android Studio中创建JNI项目,实现Java调用C++代码。涉及关键步骤包括:项目结构调整、库文件替换、函数导出、Android Studio的JNI项目创建及.so导入、界面元素添加等。
摘要由CSDN通过智能技术生成

前言

本篇是应一个读者的请求,而且这种需求应该还是蛮多的:刚入职或者刚进实验室的新人,接手一套C++算法工程,现在老板让你移植到Android上。全部用Java重写,当然是不现实的。本文将介绍一种尽可能简单的移植方法。

本文使用的软件版本如下:

  • VisualStudio 2019 16.3.5
  • AndroidStudio 3.5
  • NDK-r16B
  • Android SDK 21
  • Opencv 4.1.1(android & windows)

准备测试用的OpencvWindows项目

首先请参考 VS2017的C++开发心得(八)DLL动态链接——Opencv的使用建立一个简单的OpenCV VS解决方案,如下:

一个简单的cv::sum的使用。

开始进行安卓端的移植

1. 先创建一个VS的C++安卓.so项目,参考VS2019 C++的跨平台开发——Android .so开发

2. 一些基本的移植概念

所谓的移植,就是移除过去OpenCV对于Windows底层的依赖。

一听到Windows的底层依赖,你是不是感觉自己都是用的C++的标准库在编程,没有用到任何Windows的接口,应该不会有任何依赖。举个一个简单例子,比如你的项目在使用Opencvxxx.dll的时候,会用到LoadLibrary这个函数,而这个函数就是由Windows的user32.dll实现的。

在有全部源码的情况下可以使用安卓的NDK进行重新编译源码,然后要把所有使用的第三方库文件.dll和.lib,替换为安卓端的.so和.a。

3.使用NDK进行项目编译

第一种老实的做法,在步骤1.中建立的安卓项目下面把所有的.cpp和.h文件按照原来的项目结构拷贝过去。

第二种取巧的做法,直接修改“Opencv411Template.vcxproj”和“Opencv411Template.sln”为安卓项目。

(第三种不推荐的做法,在AndroidStudio的JNI中导入所有的.cpp和.h进行编译,用AndroidStudio开发C++实在不推荐)

这里简单介绍第二种做法,尝试之前请备份整个项目。

首先用文本工具打开“Opencv411Template.vcxproj”(准备的Opencv Windows项目)和“SharedObject7.vcxproj”(步骤1.中建立的安卓项目)。

先看下Windows的项目文件:

上图红色框内的就是需要进行编译的文件。除了这部分其他全部替换为“SharedObject7.vcxproj”(下图)中的内容就行,是不是很简单:

把两个红框标注的内容合并起来,记得还要把 "SharedObject7.cpp" "SharedObject7.h""pch.h" 这三个文件拷贝到Opencv411Template的对应目录下,合并结果如下:

接下来修改.sln文件,用右方的红框内的内容替换到左边:

重新打开Opencv411

  • 11
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值