码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • WebAssembly探索篇(三)emcc和cmake编译opencv案例


    文章目录

    • 开发环境
      • 安装opencv环境
    • 实践出真知
      • 完整项目
      • 效果图
    • 踩坑
      • fatal error: 'opencv2/opencv.hpp' file not found
        • 增加软链ln(无效)
        • 改用自行安装opencv,再显示指定lib路径
      • emcc命令行运行方式

        最近因为项目原因,研究了一下WebAssembly。2015年上线与JS、HTML、CSS并称web界四语言,额,虽然已经上线快10年,但是研究的人好少,注定这个探索之路是崎岖的。(事实也是这样,已经耗进去快2周了,人都麻了-_-||)
        这是一个曲折的探索之路,emcc编译opencv的代码真的问题好多。。。

    开发环境

    为啥要把开发环境放在第一位呢,这里面也是采了无数的坑。

    开发工具版本
    Ubuntu18.04
    emscripten3.1.55
    cmake3.28.3
    opencv3.2.0

    安装opencv环境

    1. 安装
    sudo apt-get update
    sudo apt-get install libopencv-dev
    
    • 1
    • 2
    1. 查看opencv的lib目录
    dpkg -L libopencv-dev
    
    • 1
    1. 配置环境变量
    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
    export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
    source ~/.bashrc
    
    • 1
    • 2
    • 3

    实践出真知

    完整项目

    项目结构如下:

    ┌─demo              项目名称 
    │─build             编译文件(emcmake和emmake后的产物)
    │  └─CMakeFile       
    │  │  └─...      
    │  └─cmake_install.cmake
    │  └─CMakeCache.txt
    │  └─Makefile
    │  └─helloCV.js
    │  └─helloCV.wasm   
    ├─main.cpp          主入口
    ├─CMakeLists.txt        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. main.cpp
    #include 
    #include 
    using namespace cv;
    int main(int argc, char **argv) {
      Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));
      std::cout << "M = " << std::endl << " " << M << std::endl;
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. CMakeLists.txt
    cmake_minimum_required( VERSION 3.8 )
    set( CMAKE_CXX_STANDARD 17 )
    project( helloCV )
    
    # Needed for opencv2/opencv.hpp
    include_directories( /root/wasm/opencv-demo/opencv/include )
    
    # Needed by opencv.hpp for opencv2/opencv_modules.hpp
    include_directories( /root/wasm/opencv-demo/opencv/platforms/js/build_wasm )
    
    # Needed by opencv_modules.hpp for every module
    file( GLOB opencv_include_modules "/root/wasm/opencv-demo/opencv/modules/*/include" )
    include_directories( ${opencv_include_modules} )
    
    # Our hello world executable
    add_executable( helloCV main.cpp )
    
     set(CMAKE_EXECUTABLE_SUFFIX ".html") # 编译生成.html
    
    # Link to opencv.js precompiled libraries
    file( GLOB opencv_js "/root/wasm/opencv-demo/opencv/platforms/js/build_wasm/lib/*.a" )
    target_link_libraries( helloCV ${opencv_js} )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    1. 执行cmake
    //在项目根目录下,执行如下命令
    mkdir build 
    cd build 
    emcmake cmake ..
    emmake make 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    效果图

    将helloCV.html、helloCV.js和helloCV.wasm三个文件下载下来,在vscode中使用preview on web server插件运行,如下图:
    在这里插入图片描述

    踩坑

    fatal error: ‘opencv2/opencv.hpp’ file not found

    刚开始使用apt-get安装opencv库,并且用emcc命令行执行编译,但疯狂报错,查阅大量资料,有人说emcc只能引用静态库,动态库会报错!

    增加软链ln(无效)

    make-opencv2-opencv-hpp-not-found

    sudo ln -s /usr/share/OpenCV /usr/include/opencv2

    改用自行安装opencv,再显示指定lib路径

    How to use emscripten with cmake for project dependencies?
    stackoverflow真的有太多的宝藏,在里面帖子里找到了解决方案!
    在这里插入图片描述

    emcc命令行运行方式

    问题很多,无法吐槽,只能避开,如果依赖的第三方库太多,强烈建议不要使用此方式,不然-l 写的想吐。。。

  • 相关阅读:
    python中,axis=0,axis=1,axis=2的理解【对于按待定轴求和,axis=‘x’的理解】
    平均精度(AP)
    深入解析Flutter下一代渲染引擎Impeller
    第70章 单元测试的定义实现
    【wine】docker ubuntu 18:04 --with-mingw 编译wine
    【动手学深度学习】基础优化算法
    手把手教你搭建ELK-新手必看-第四章:搭建logstash
    生活旅游数据恢复:全国违章查询
    位运算 科普
    三十四、数学知识——约数(试除法 + 约数个数 + 约数之和 + 欧几里得算法)
  • 原文地址:https://blog.csdn.net/huhui806/article/details/136710279
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号