问题:现在是需要将以c++编写的opencv 连接到android中来。
一个直接在android中配置 opencv
一个是获得opencv的so文件。
关键的问题是对单独获取到的图片,转换成需要的mnist数据格式再输入到模型中去是一个问题。
本来看网上大致的分为了这两种,一个是直接在android里面调用opencv,直接利用opencv4android,然后改造自己的cpp.可是我对jni又不熟,看了下c代码的形式 ,当时果断的放弃了,不知道具体要改多少cpp中的代码.另外一个当然是直接将c++项目导入成.so文件.
下面就是打算将c++ 和opencv项目 生成动态链接.so的过程(虽然失败放弃了,但是连记录都不记的话,就真是白忙活了,也现在占个坑,以后万一还得走这条路怎么办?)
那vs直接能将项目生成.so文件吗?
c++在windows下一般的动态链接库是dll,而现在android是基于unix的,所以动态链接文件是.so文件.
这c++项目最主要的是依赖了opencv计算机视觉库,所以必须在linux配置好opencv。也就是编译opencv源码,生成opencv.so文件,当时是这样想的。
一开始想要编译opencv的时候,刚好硬盘不是很大,使用命令cmake的时候,直接不足。然后就去扩容啊 ,结果也是罪了 ,得到一个就给我(起始和终点差不多)1m大小的 空间,算了最后,删除了以前的资源。
再来编译的时候想起了cmake-gui这个可视化工具。虽然说和命令行代码的效果是一样的,但是毕竟这个好看点,熟悉点。
这中间遇到了好多的问题()。
出现红色的时候,我就直接再configure一次。然后没问题。
然后就是generate。
注意的是opencv的type需要的是release版本,所以需要下面操作。另外同样的去勾选需要添加的依赖。
后面的就是在刚才选择生成文件的文件夹中。运行cmake,make install命令。
install完成之后 需要配置一些环境参数问题。(只能这样的截别人的图了,自己的当时还不知道哪些能用,没保存)
嗯 这个opencv.conf文件本来是个空的,当时我还怀疑有问题,后面运行 的没问题就算了。
上面配置好了,就是写个测试文件来看看是否编译成功。结果这块也是花了不少的时间,后面总结起来就是各种依赖的路径没有添加进去。
当时在这块碰到的又两个 一个是qt的,一个是lib
想想要这个qt有什么用,去cmake中取消一次,没有用。
那我也没有装qt这个,要不去装一个,然后将路径添加进去。
后来看到是在anaconda中这样的so文件,刚好找到下面的那个试了试,成功了,才发现是没有添加到路径。
上面的编译问题解决了 ,然后也生成了main可以执行的程序,执行时 ,后面又出现这样的一个。
当然这个导入语句不能直接从问题上看出导入什么路径,这个解决方案的出处,忘记截图了,应该。
这样能执行文件了。
好了,将自己的cpp和h文件添加进来 执行吧,注意用下面的语句的格式来链接opencv。
以前没有注意过linux下的g++。现在发现各种问题。就是这个问题。
上面的还好理解是,自己的编写方式问题。
整了一段时间,g++升级了,检查严格了,c++11,不支持itoa 等等,后面的添加了相应的头文件都不行,最后一个是换了一个函数,另外的看着当时写了,但是没有用到,就直接删除了。
比如动态链接的查找路径问题,这个是没有将当前路径添加查找路径中去。
添加进去就好了。
当时想着,先写一个简单的函数测试下。这个一开始写的是print语法形式报的错误。后面改成cout就好了。
更简单点就是报这样的错。但是也不影响它的错误的存在,只是没有了cv方面的。
这个可能是(心)当时累了,没有找到具体的问题是什么,所以找了几下 没有找到解决方案。(以后再继续的话 可以从这里开始。)
发现就算最后生成了正常的so文件,到android中去,还是得用jni的方式,重写接口,因为不符合java的接口形式。
所以觉得 一开始直接opencv4android,所以这个就暂时放弃了,一天的坑,没有爬出来。
嗯 ,接下来是时候爬入另外一个坑了。