最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

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

业界 admin 1浏览 0评论

前言

本篇是应一个读者的请求,而且这种需求应该还是蛮多的:刚入职或者刚进实验室的新人,接手一套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

前言

本篇是应一个读者的请求,而且这种需求应该还是蛮多的:刚入职或者刚进实验室的新人,接手一套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

发布评论

评论列表 (0)

  1. 暂无评论