vs2013建mfc工程,静态编译链接libjpeg和opencv?


Marcus Souza 来自巴西伯南布哥的 Paudalho,在 Locus Custom Software 担任软件工程师。 理学硕士。 在伯南布哥联邦大学,他拥有八年的技术经验,专注于机器学习和计算机视觉,最近对区块链游戏开发很感兴趣。 本文源于一项使用计算机视觉领域和 Cartesi Rollups 的研究,展示了如何将 OpenCV 与 Rollups DApp 一起使用。

Cartesi Machine 是 Cartesi(区块链操作系统)的引擎,它是一个用于开发和部署可扩展的去中心化应用程序(DApps)的第二层平台。 区块链操作系统提供了一个与区块链基础架构相结合的Linux操作系统,它允许使用熟悉的编程语言(如Python)开发dapp,而不需要编写solid代码。刚刚了解 Cartesi吗 ? 在这里了解更多关于区块链操作系统的信息。

OpenCV是图像处理和执行计算机视觉任务最好的工具之一。它是一个开源库,可以用来执行人脸检测、异议跟踪、地标检测等任务。它支持多种语言,包括Python、Java和c++。

在Cartesi Machine内运行OpenCV将使dapp开发人员能够以分散的方式探索复杂的主题,如生物识别中的指纹欺骗检测,并将从图像中提取的特征输入机器学习模型进行模式识别。

  1. 交叉编译站主机是一个Linux系统。
  1. 该环境是Ubuntu /cartesi/image-toolchain 获取已经构建的工具链,但用户也可以从头构建它。因此,可以重现以下步骤。

    最安全的方法是使用cartesi image-toolchain存储库中已经存在的工具链。克隆过程结束后,执行自述文件中提到的构建和运行命令。

    执行此命令将使用户能够在控制台模式下访问docker镜像。这样,用户就可以访问/opt/riscv文件夹,查看它的内容。


    既然所有先决条件都设置好了,现在就进入OpenCV存储库。

    CMake可以在命令行或通过GUI进行配置。为了简单起见,下面的步骤展示了使用cmake-gui的过程。


    2. 仔细查看源代码所在的位置以及构建二进制文件的位置,并相应地设置路径。

    3.在您设置了适当的路径之后,单击configure,将出现一个窗口。将项目的生成器设置为Unix Makefiles,并在指定交叉编译选项旁边的框中打勾。


    4. 单击Next后,将出现下面的对话框。在这里,设置GCC和g++交叉编译器和目标根的路径。



    6. 要安装的模块可以在这里检查。作为一个例子:


    7. 确保你完成了以下任务:


    将CMAKE INSTALL前缀更改为一个单独的目录,以避免干扰本地架构库。

    8. 设置所有这些值之后,单击generate按钮生成Makefile并退出。

    退出CMake-GUI后,在前面给出的前缀处构建并安装OpenCV。


    要将OpenCV放入Cartesi Machine中,可以通过DApp安装或复制来完成。为了简单和测试,下面是将OpenCV复制到机器内部文件夹的步骤。为此,挂载rootfs。一般的Cartesi示例附带的ext2文件。

    这将把rootfs系统挂载到/mnt/cartesi路径中。只需在文件系统中复制OpenCV交叉编译的文件夹(使用命令行或nautilus资源管理器)。在复制之前,请确保文件系统有足够的空闲空间。如果不是,则可以使用普通命令增加其大小。在本教程中,复制文件夹是/mnt/cartesi/usr/local/opencv-rvv。有了它,OpenCV就可以在Cartesi

    在这一部分,将操作从RGB图像转换为灰度内的笛卡尔机将作为一个例子。

    将输入图像转换为灰度并保存在磁盘上的代码:

    使用以下命令交叉编译上述代码:

    像这样,一个名为“lerImagem”的可执行文件将被编译并准备在Cartesi Machine中运行。它既可以用来构建一个DApp,也可以直接使用它,就像复制OpenCV一样。如下图所示:


    3.成功编译后,在运行时加载期间无法检测到动态库。

    解决方法:导出库路径(编译前)。

    是一家总部设在巴西的公司;它于2014年开始运营,目前与世界各地的多个项目、品牌和成员合作。Locus提供的服务包括CTO即服务、员工扩充、班组外包、QA测试因子、云安全、数字产品设计和设计初始。Locus将看似无法解决的技术困境转化为成长机遇,带来快速且有质量保证的解决方案。世界已经变了,公司和个人的需求也一样。这种需求标志着创新和敏捷性的存在。

    Blockchain OS 是一个分散的第 2 层基础设施,支持 Linux 和主流编程软件组件。 使得开发人员可以第一次在Blockchain OS上使用丰富的传统软件工具、库和他们习惯的服务编写可扩展的智能合约,Cartesi 弥合了主流软件和区块链之间的差距。

    Cartesi 正在引领数百万新创业公司及其开发人员加入并使用区块链操作系统,同时将 Linux 应用程序纳入其中。 凭借开创性的虚拟机、Rollups和侧链,Cartesi 为所有开发人员铺平了道路,以帮助他们进入区块链的世界并构建下一代区块链应用程序。

    Cartesi在此诚挚的邀请所有人,请和我们一起来到区块链操作系统的世界,一起探索未来。



基于对话框,不使用Unicode库,在静态库中使用MFC,完成(不使用Unicode库这个选不选都可以,完了可以自己设置,静态库中使用MFC也需要根据自己的需求自己设置,如果不需要生成脱离环境的.exe就可以用默认选项,而且这个也要与其他同时设置才行,具体的下面会涉及到

如果是初次配置OpenCV环境,需要在环境变量中增加以下路径(右击计算机,属性,打开控制面板,点击左侧高级系统设置,环境变量)

在系统变量的PATH中添加

注意是添加,原有项目千万不要删掉,每项之间以英文状态下的分号隔开

其中本例中D:\opencv为OpenCV安装目录,根据你安装的情况自行修改。后文相同,不再复述。

菜单,视图,属性管理器

双击工程名称,打开属性页

选择配置目录,VC++目录,包含目录,点击右侧下拉箭头,编辑

点击右上角图标添加文件夹(这里我已经添加过了)

同样,在“包含目录”下方的“库目录”中添加

链接器,输入,附加依赖项,编辑(这里我也已经配置过了,所以在单个里面是继承的值)


在属性页左上角配置中选择Release

同样,在Release页面附加依赖性中增加

文件名与前面相比,少了后缀"d"

点击确定,至此OpenCV环境已配置完成

但是这里这样配置还不能release成exe,脱离环境。下面介绍如何生成可以脱离环境在任何电脑上都可以运行的exe文件

链接器->输入->附加依赖项,编辑加入下列项:

链接器->输入->附加依赖项,编辑加入下列项:

点击“应用”,“确定”。

如果想用64位的还可以配置X64环境,步骤差不多。64位只能在64位机上运行,32位的32位机和64位机都可以

菜单,视图,工具箱,打开工具箱,选中要用的控件添加就可以了

 然后就全部结束了,大家可以尝试着编写代码了。可以在项目里面找到Release->My_MFC.exe,拷贝出来,就可以在其他机子上运行了。


        当一个opencv工程实现之后,我们会面临一个问题,怎么把opencv程序的exe在其他电脑上运行,这个问题已经有很多人遇到过,当然也有很多人给出了博客,介绍了具体的解决方法,具体自己操作时,还是遇到了这样或者那样的小毛病,不过凭借自己根据错误提示解决问题的能力,最后还是把静态编译给编译成功了。

 本文介绍两种opencv程序移植到其他电脑运行的方法,一种是动态编译,需要拷贝程序运行需要的dll,也就是-个exe跟着多个dll的模式,这种简单粗暴,但是显得拖拖拉拉,一个程序还得跟着那么多其他文件,所以我们很不推荐。另外一种就是本文主要介绍的静态编译,和之前运行不一样,我们在这使用的不是opencv的lib库,而是staticlib,编译成功之后,程序只需要拷贝一个exe,就可以在其他电脑上运行。


    (1)opencv库的dll,检查你所引用的h文件,把对应的dll,拷贝过来就行,注意debug和release的不同,当然一般程序发布的话都会用release版本的,因为release版本比debug版本要快10倍有余。


  右键属性表-》属性-》VC++目录-》包含目录,然后添加opencv的h文件目录:

    最后程序运行会出现很多warning,但是不影响运行,程序大小为7.5M!挺大的,但是一个大程序,总比一个exe跟着多个dll好啊。



我要回帖

更多关于 jpeg是静态图像压缩编码标准 的文章

 

随机推荐