交叉编译OpenCV后,您不需要再使用CMake重新编译。当您交叉编译OpenCV时,已经使用了CMake生成了构建文件并为特定目标平台(例如ARM架构)编译了源代码。因此,一旦交叉编译成功完成,您就可以在目标平台上使用生成的库和头文件。
在交叉编译OpenCV后,请将生成的库文件(libopencv_so)和头文件(include目录中的h文件)拷贝到目标设备的相应文件夹中。然后,您可以在目标设备上编译和链接OpenCV应用程序。
确保在编译OpenCV应用程序时,正确地指定库文件和头文件的路径。如果您在目标设备上使用CMake构建应用程序,请在CMakeListstxt文件中指定这些路径,以便找到交叉编译的OpenCV库和头文件。例如:
# 设置OpenCV的路径
set(OpenCV_DIR "/path/to/cross-compiled/opencv")
# 寻找OpenCV库
find_package(OpenCV REQUIRED)
# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 将OpenCV库链接到目标应用程序
target_link_libraries(your_target_app ${OpenCV_LIBS})
这里的/path/to/cross-compiled/opencv应替换为您在目标设备上放置交叉编译的OpenCV库和头文件的路径。然后,按照正常流程编译您的OpenCV应用程序即可。
PyInstaller是一个用来将Python程序打包成独立可执行软件的工具,支持 Windows、Linux 和 Mac OS X。生成的可执行软件在没有Python的环境中可以直接运行,方便软件分发,进一步降低使用成本,提升使用效率。
下面演示如何使用 PyInstaller 将程序打包成Windows下的exe软件。
使用pip的方式进行安装,这样可以自动安装其他依赖库。
如果pip还未安装,请参考我的另一篇文章《 Python pip包管理工具 》
在cmd命令行控制台或者VS Code内置的终端输入命令行生成应用,首先将当前路径切换到Python程序所在的路径(如下示例的SubOcrpy文件在python文件夹下的SubOcr文件夹内),然后输入生成应用的命令。
命令执行成功后在 I:\work\python\SubOcr\dist 文件夹下生成了SubOcr文件夹,里面包含了SubOcrexe文件。整个SubOcr文件夹就是一个绿色软件,随便移动到任何位置都可运行。
实际上在用pyinstaller命令时会在Python程序的所在路径生成一个后缀为spec的同名文件,然后根据此文件的配置生成应用,这就是PyInstaller的原理。这样做的好处是spec保存了生成应用的配置,每次重新生成应用时可以省略指定参数,尤其是指定了其他的资源、程序库时。我们可以通过以下命令先生成spec文件。
pyi-makespec的命令参数跟pyinstaller的相同,在生成spec文件后可以对其部分选项进行编辑(可以用VS Code或自带的记事本编辑),添加更多参数,然后再用pyinstaller命令生成应用。
spec文件的主要选项:
上面示例的SubOcr用到了opencc和opencv-python,其中opencc下的数据文件和opencv-python下的dll文件在生成应用时不会自动导入(缺少这些文件应用无法正常使用),因此需要在spec文件中指定路径。对spec文件的修改如下:
以上便是PyInstaller打包Python程序的全过程,如果在此过程中遇到问题,可以在评论区留言,定当知无不言,言无不尽。
OpenCV是一个开源的图像处理库,QML是Qt官方推出的一个描述性语言,QtMarkupLanguage,QtQuick也是Qt官方推出的一个技术框架,在开发嵌入式、动态触屏等时有一定的优势。
模块的作用:
打一个很简单的比方,QML就是Qt的HTML,C就是Qt的JavaScript,而QtQuick相当于一些已经集成好的开发框架,使开发应用程序变得更加简单省事。
OpenCV是一个基于C/C的开源图像处理库,和Qt本身没有太多关联,其主要是用于计算机视觉和图形开发,Qt的扩展应用OpenCV并不是每个应用程序都要用到,只是某些有特殊需求的应用程序可以更方便地使用Qt扩展的OpenCV应用。比如说用Qt开发一个软件,要使用人脸识别功能,就可以集成OpenCV来实现。
使用频率:
虽然说QML相当于HTML,C相当于JavaScript,但是还是有一定区别:所有的网页都是通过解析HTML渲染出的,JavaScript虽然可以动态改变网页,但是最终还是通过改变HTML来达到效果;QML、C的关系恰好反过来,在Qt中,C是“更加底层”的,QML使用更加简单的标记语言的语法来调用底层的C绘图支持API,从而提高程序开发的效率。
使用QML可以更快速、简捷地开发应用程序,在Qt中的使用频率也是很高的,不过这要根据特定开发人群、开发目标而定。有些开发者习惯直接使用C开发,而有些开发者更喜欢简单的QML,很多时候都是“用QML开发用户界面,用C开发业务逻辑”,但是用C开发用户界面的也不在少数。
QtQuick是一套开发框架,核心语言就是QML。
QtQuick的使用频率不低,从Qt的NewProject界面就可以看出,QtQuick是和Qt传统的CWidge平起平坐的(当然还有QtforPython等)。
OpenCV在不需要图形处理功能的情况下是不需要用到的,所以不怎么好说“使用频率”,因为这是针对特定的软件需求来的。
是否有必要学习:
QtQuick能够使应用程序开发更有效率,但是并不是开发一个程序必备的,能用QtQuick开发的,C肯定能够做出来,但是耗费时间、精力更多。在Qt开发工作这一块,掌握Qt的核心功能是必须的,而且这还远远不够。在招聘的时候肯定是考察应聘者对Qt各种技术和开发思想的理解和掌握情况,而QtQuick是官方推出的框架,掌握其开发方法应该是基本功。
第一步:由于opencv是在cmake工具下建立的工程,所以我们先要下载cmake,下载地址随便一搜都有,不多说。下载到home的主目录下,这里我们是/home/lg。看下面的命令:#cd /home/lg#tar xzvf CMake247targz #cd CMake247#/boostrap#gmake#make install这样cmake工具安装好了,并且可以直接使用cmake命令根据cmake的编译规律,我们选择外部编译。
2
下载Opencv230到/home/lg解压后进入Opencv230的目录下(这里的opencv与以前版本10的不一样,没有configure文件,所以我们执行不了 /configure命令) :#mkdir build#cd build#cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON (这条命令解析可以参考cmake教程, 但是记住这里的第二个选项,我们将opencv安装在/usr/local目录下的)#make#make install到这opencv编译完成,接下去看看opencv这个工具能正常使用。
3
记住这里的做法前一种对fedora有用, 也就是说在fedora的环境下只能使用这种做法, 但是ubuntu却可以使用两种方法。 顺便说一下, 经常遇见apt-get命令,这是在ubuntu下使用获取软件包的命令, fedora使用的是yum, 记住了, 否则经常出现使用apt-get却获取不了软件包的情况。方法1:在/etc/ldsoconfd下新建一个文件opencvconf,里面输入/usr/local/lib方法2:在/etc/ldsoconf文件中加入/usr/local/lib这一行然后执行#ldconfig(root权限下)#cp /usr/local/lib/pkconfig/opencvpc /usr/lib/pkgconfig(或者是输入这个命令 exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH)( pkconfig的用法见以前的博文)至此opencv安装完成我们可以找个例子来做实验#cd /home/lg/Opencv230#cd samples/cpp#g++ `pkconfig --cflags --libs opencv` drawingcpp -odrawing(记住前面的两个引号是通过ESC下面的那个波浪符键获得的)现在我们编译那个人脸检测程序,在Opencv230/data/目录下有检测鼻子、眼睛的XML文件,这可以通过改build目录下的c目录下的facedetect文件获得。#cd #cd c#g++ `pkconfig --cflags --libs opencv` facedetectc -ofacedetect到此结束
我觉得配置是一个很重要的程序,不能总重新配置是一个软件的重要之处。有两种办法可以解决这个问题。
设置属性表
就是在项目的属性管理器里面,新建一个项目属性表。然后每次打开程序时,都选择添加现有属性表,然后去找一开始创建的属性表 ,导入进去就可以了。一次编写,到处使用,系统环境变量你都不需要设定,所有设定都写在属性表文件中,用的时候在vs里导入属性表。如果要切换opencv版本,只修改opencv编译输出目录就可以了。
新建继承值
就是把库目录那些,放到继承值里面,在项目属性表中win32和x64下面分别有win32user和x64user,在里面把配置信息配置一遍,这样,你配置的信息就出现在了继承的值里面。每次新建程序后,就会自动继承这些,就不用重新配置了。
CMake的语法
简单学一下CMake的语法,就可以完全避免配置的过程,而且还可以帮助你完成诸如拷贝文件(自动拷贝dll),打包程序,生成文档等功能。目前,许多的开源库和软件都提供了CMake支持,CMake今后也会越来越通用和流行,所以非常值得一学。
总结:希望以上方法对你有帮助。
不能。
我打包的openCv 总共300多m,openCv JniLibs 有136m,整个项目加其他1G多,打包发布只有50M左右,也还好。
如果你想小一点的话,可以只保留 armeabi-v7a 或者 armeabi,但是要注意,再添加别的SDK的时候也只能只保留armeabi-v7a 或者armeabi ,有其他文件夹的话,而OpenCV游没有加进去的话,会报错。
只保留armeabi-v7a 或 armeabi 能兼容大部分的手机
1、生成exe文件就是生产可执行文件。2、以GCC编译器为例,可以分为四步。第一步是预处理,包括语法检查等工作。gcc-Pabcc第二步由源程序生产汇编语言代码。gcc-Sabcc会生成abcs文件,这个文件里就是汇编代码。第三步编译器生成目标代码,一个源文件生成一个目标代码。gcc-cabcc会生成abco第四步连接器从目标代码生成可执行文件。gccabco3、目标代码包括机器码和符号表(函数及变量名)。连接器的主要作用是通过符号表在库文件和其他模块中找到在目标代码中引入或未定义的符号(函数及变量名),将几个目标代码合成可执行文件。
以上就是关于交叉编译后的opencv还要cmake+吗全部的内容,包括:交叉编译后的opencv还要cmake+吗、使用PyInstaller打包Python程序、OpenCV_opencv毛星云等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)