Qt+openCV学习笔记(十六)Qt6.6.0rc+openCV4.8.1+emsdk3.1.37编译静态库

前言:

有段时间没来写文章了,趁编译库的空闲,再写一篇记录文档

WebAssembly的发展逐渐成熟,即便不了解相关技术,web前端也在不经意中使用了相关技术的库,本篇文档记录下如何编译WebAssembly版本的openCV,可以给使用C++开发web前端的小伙伴使用

一、安装需要的软件

1.安装git

这方便教程很多,不再重复。笔者使用的是git2.33

2.安装cmake

这个教程也很多,但笔者没有安装,使用的是Qt安装时,下载的

3.安装emsdk3.1.37

笔者偷懒了,也是搭建qt6.6.0时使用的版本,具体教程就不放置了

若不想自己安装的,可以下载笔者使用的版本

二、下载所需要的资源

1.下载opencv4.8.1源码

https://github.com/opencv/opencv/archive/refs/tags/4.8.1.zip

2.下载opencv_contrib-4.8.1源码

https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.1.zip

3.wechat_qrcode模型

detect.caffemodel

detect.prototxt

sr.caffemodel

sr.prototxt

4.xfeatures2d

boostdesc_bgm.i

boostdesc_bgm_bi.i

boostdesc_bgm_hd.i

boostdesc_binboost_064.i

boostdesc_binboost_128.i

boostdesc_binboost_256.i

boostdesc_lbgm.i

vgg_generated_48.i

vgg_generated_64.i

vgg_generated_80.i

vgg_generated_120.i

5.face_landmark_model.dat

三、设置环境变量

环境变量设置方法很多,可以直接设置系统的环境变量,笔者使用的是在一个cmd窗口中临时设置环境变量

执行如下命令

D:\emsdk\emsdk-3.1.37\emsdk_env.bat
set path=D:\Qt\Tools\mingw1120_64\bin;D:\Program Files\Git\usr\bin;%path%

若是查看环境变量执行如下

echo %path%

注:一定要记得,激活emsdk的环境变量 

四、生成make文件

在设置好环境变量的cmd中执行(请按实际目录执行)

D:\Qt\Tools\CMake_64\bin\cmake-gui.exe

打开如下窗口

点击configure,弹出如下窗口

 以上是笔者的设置,点击Next,

设置编译器,以下是笔者的设置

 

 之后就是等待完成,此过程时间有点长​

 configure完成后,修改配置选项

笔者提示,很多库并没有做web上的兼容,建议先编译opencv官方推荐的选项,然后再根据自己的需要,增加其他模块

以下是opencv官方使用的默认选项,可供有需要的小伙伴参考

'-DPYTHON_DEFAULT_EXECUTABLE=D:\\Program\\Python310\\python.exe', 
'-DENABLE_PIC=FALSE', 
'-DCMAKE_BUILD_TYPE=Release', 
"-DCMAKE_TOOLCHAIN_FILE='emsdk-3.1.37\\cmake\\Modules\\Platform\\Emscripten.cmake'", 
"-DCPU_BASELINE=''", 
'-DCMAKE_INSTALL_PREFIX=/usr/local', 
"-DCPU_DISPATCH=''", 
'-DCV_TRACE=OFF', 
'-DBUILD_SHARED_LIBS=OFF', 
'-DWITH_1394=OFF', 
'-DWITH_ADE=OFF', 
'-DWITH_VTK=OFF', 
'-DWITH_EIGEN=OFF', 
'-DWITH_FFMPEG=OFF', 
'-DWITH_GSTREAMER=OFF', 
'-DWITH_GTK=OFF', 
'-DWITH_GTK_2_X=OFF', 
'-DWITH_IPP=OFF', 
'-DWITH_JASPER=OFF', 
'-DWITH_JPEG=OFF', 
'-DWITH_WEBP=OFF', 
'-DWITH_OPENEXR=OFF', 
'-DWITH_OPENGL=OFF', 
'-DWITH_OPENVX=OFF', 
'-DWITH_OPENNI=OFF', 
'-DWITH_OPENNI2=OFF', 
'-DWITH_PNG=OFF', 
'-DWITH_TBB=OFF', 
'-DWITH_TIFF=OFF', 
'-DWITH_V4L=OFF', 
'-DWITH_OPENCL=OFF', 
'-DWITH_OPENCL_SVM=OFF', 
'-DWITH_OPENCLAMDFFT=OFF', 
'-DWITH_OPENCLAMDBLAS=OFF', 
'-DWITH_GPHOTO2=OFF', 
'-DWITH_LAPACK=OFF', 
'-DWITH_ITT=OFF', 
'-DWITH_QUIRC=ON', 
'-DBUILD_ZLIB=ON', 
'-DBUILD_opencv_apps=OFF', 
'-DBUILD_opencv_calib3d=ON', 
'-DBUILD_opencv_dnn=ON', 
'-DBUILD_opencv_features2d=ON', 
'-DBUILD_opencv_flann=ON', 
'-DBUILD_opencv_gapi=OFF', 
'-DBUILD_opencv_ml=OFF', 
'-DBUILD_opencv_photo=ON', 
'-DBUILD_opencv_imgcodecs=OFF', 
'-DBUILD_opencv_shape=OFF', 
'-DBUILD_opencv_videoio=OFF', 
'-DBUILD_opencv_videostab=OFF', 
'-DBUILD_opencv_highgui=OFF', 
'-DBUILD_opencv_superres=OFF', 
'-DBUILD_opencv_stitching=OFF', 
'-DBUILD_opencv_java=OFF', 
'-DBUILD_opencv_js=ON', 
'-DBUILD_opencv_python2=OFF', 
'-DBUILD_opencv_python3=OFF', 
'-DBUILD_EXAMPLES=ON', 
'-DBUILD_PACKAGE=OFF', 
'-DBUILD_TESTS=ON', 
'-DBUILD_PERF_TESTS=ON', 
'-DBUILD_DOCS=OFF', 
'-DWITH_PTHREADS_PF=OFF', 
'-DCV_ENABLE_INTRINSICS=OFF', 
'-DBUILD_WASM_INTRIN_TESTS=OFF', 
"-DCMAKE_C_FLAGS='-s WASM=1 -s SINGLE_FILE=1 -s USE_PTHREADS=0 '", 
"-DCMAKE_CXX_FLAGS='-s WASM=1 -s SINGLE_FILE=1 -s USE_PTHREADS=0 '"

内容比较多,需要大家细心设置,或第一次直接使用cmake命令 

以下是笔者感兴趣的选项

安装目录(生成的动态库的目录)

 是否生成付费相关的部分

 添加扩展库,注意要具体到modules目录

 

  再次点击configure后,可能还需要还需要设置多次,配置其他选项或下载文件

继续点击configure(可以多点几次,有时多点几次就可以下载成功),

若输出中仍然存在红色的文字,打开编译目录,找到日志文件CMakeDownloadLog.txt,查看缺少或下载失败的文件,下载完成后,按日志文件的提示,放入指定目录即可

笔者已下载缺少的文件,处理方法如下

1.把downloads和testdata两个目录,直接放在编译目录(笔者已整理好内部目录)

再次点击configure,此时应该不会有红色的文字了(若存在,请自主解决)

点击generate,生成makefile文件

四、编译源码

设置好环境变量的cmd中,切换目录到编译目录(请按实际目录执行)

执行mingw32-make -j6 开始编译

(6代表同时开6个线程编译,请读者按照自己机器的配置设置,以加快编译速度)

些过程耗时较长,笔者等待了半小时左右

编译完成后,执行mingw32-make install

过会就可以在安装目录找到生成的静态库了,笔者是在编译目录下的install

因时间关系,笔者本次就不添加测试程序了

已生成的静态库(正式库+xfeatureds2d)​​​​​​​

后记:

1.WebAssembly开发,一般使用静态库,若有小伙伴执意使用动态库,可以自行编译下测试

2.部分库,即使编译成功,也不一定能使用,或出错,如imgcodecs模块,笔者使用cv::imwrite()时,会导致网页异常退出

3.笔者建议,不要使用world的库,发布程序时,库太大了,不实用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13.(开发工具篇github)如何在GitHub上上传本地项目

一:创建GitHub账户并安装Git 二:创建一个新的仓库(repository) 三、拉取代码 git clone https://github.com/ainier-max/myboot.git git clone git@github.com:ainier-max/myboot.git四、拷贝代码到拉取后的工程 五、上传代码 (1)添加所有文件到暂存

Mac安装Ecplise产品报错:dose not contain the JNI_CreateJavaVM symbol

1. 絮絮叨叨 工作中需要借助Ecplise Memory Analyzer (MAT)分析dump文件,直接下载、安装、运行MAT报错 询问同事后,同事说可以先安装Ecplise,再以插件的形式安装MAT下载、安装好Eclipse,点击运行仍然报错,且错误信息一…

【C语言】循环结构程序设计 (详细讲解)

前言:前面介绍了程序中常常用到的顺序结构和选择结构,但是只有这两种结构是不够的,还有用到循环结构(或者称为重复结构)。因为在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题。 【卫卫卫的代码仓库】 【选择结构】 【专栏链…

springmvc-JSR303进行服务端校验分组验证SpringMVC定义Restfull接口异常处理流程RestController异常处理

目录& 1. JSR303 2. JSR303中含有的注解 3. spring中使用JSR303进行服务端校验 3.1 导入依赖包 3.2 添加验证规则 3.3 执行校验 4. 分组验证 4.1 定义分组验证规则 4.2 验证时通过参数指定验证规则 4.3 验证信息的显示 5. SpringMVC定义Restfull接口 5.1 增加s…

分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-CNN多特征分类预测,多特征输入模型&#xf…

Webpack 基础入门以及接入 CSS、Typescript、Babel

一、什么是 Webpack Webpack 是一款 JS 模块化开发的技术框架,其运作原理是将多个 JS 文件关联起来构成可运行的应用程序。 Webpack 拥有丰富的 plugins / loaders 插件生态圈,可以让 js 识别不同的语言如 .css, .scss, .sass, .json, .xml, .ts, .vue…

Web版Photoshop来了,用到了哪些前端技术?

经过 Adobe 工程师多年来的努力,并与 Chrome 等浏览器供应商密切合作,通过 WebAssembly Emscripten、Web Components Lit、Service Workers Workbox 和新的 Web API 的支持,终于在近期推出了 Web 版 Photoshop(photoshop.adobe…

BL808学习日志-2-LVGL for M0 and D0

一、lvgl测试环境 对拿到的M1S_DOCK开发板进行开发板测试,博流的官方SDK是支持M0和D0两个内核都进行测试的;但是目前只实现了M0的LVGLBenchmark,测试D0内核中发现很多莫名其妙的问题。一会详细记录。 使用的是开发板自带的SPI显示屏&#xff…

wzsc_文件上传(条件竞争)

打开题目链接,很常见的文件上传框 经过尝试,发现上传东西后会调用upload.php,猜测文件被传到upload目录下 随便传了几个类型的文件,访问upload目录 发现.php文件以及.htaccess、.user.ini这种配置文件都没有传上去 但是通过抓包…

Redis相关概念

1. 什么是Redis?它主要用来什么的? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提…

深入探讨 Presto 中的缓存

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 Presto是一种流行的开源分布式SQL引擎,使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Prest…

阿里云新账户什么意思?老用户、产品首购详细说明

阿里云新账户、老账号、产品首购和同人账号什么意思?阿里云账号分为云新账户、老账户、产品首购、同人账号和同一用户,阿里云官方推出的活动很多是限制账号类型的,常见的如阿里云新用户,什么是阿里云新用户?是指从未在…

408计网应用层总结

网络应用模型 ■客户/服务器模型(C/S):客户是服务请求方,服务器是服务提供方 ■P2P模型:各主机都是客户,也都是服务器(任意一对计算机成称为对等方) 注: 1.客户…

Overloud TH-U Complete for Mac:演绎您的音乐世界

Overloud TH-U Complete for Mac是一款功能强大的吉他谱曲软件,可以让您在Mac电脑上轻松进行吉他模拟、录音和混音等操作,创作属于自己的音乐作品。 Overloud TH-U Complete for Mac提供了丰富的吉他模拟和音效库,涵盖了多种吉他放大器、箱体…

计算机考研 | 2016年 | 计算机组成原理真题

文章目录 【计算机组成原理2016年真题44题-9分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2016年真题45题-14分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2016年真题44题-9分】 假定CPU主频为5…

Docker项目部署

目录 一、前端项目部署 1、上传文件 2、开启容器 3、测试 二、后端项目部署 1、打包java项目 2、将jar包和Dockerfile文件长传到Linux系统 3、构建镜像 4、开启容器 5、测试 三、DockerCompose快速部署 基本语法 一、前端项目部署 1、上传文件 里面包括页面和配置文…

秋招校招,什么是群面?

时间已经来到十月份,我们也迎来了秋季招聘的高峰期。一般来说,企业为了提高面试的速度,一般都会让我们进行群面。可是,很多人不懂得“群面”的意思,由此导致自己在面试环节丢分。今天,就跟着小编一起来了解…

阿里云关系型数据库有哪些?RDS云数据库汇总

阿里云RDS关系型数据库大全,关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB,阿里云百科分享阿里云RDS关系型数据库大全: 目录 阿里云RDS关系型数据库大全 …

QT实现TCP服务器客户端的实现

ser: widget.cpp: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xf…

嵌入式软件架构中抽象层设计方法

大家好,今天分享一篇嵌入式软件架构设计相关的文章。 软件架构这东西,众说纷纭,各有观点。什么是软件架构,我们能在网上找到无数种定义。 比如,我们可以这样定义:软件架构是软件系统的基本结构&#xff0c…