OpenCV.js 快速入门指南

这篇具有很好参考价值的文章主要介绍了OpenCV.js 快速入门指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简介

  • OpenCV.js: OpenCV 的 JavaScript 版本

  • 官方指南:OpenCV.js Tutorials

2. 下载

  • 可通过如下链接下载到指定版本的预编译 opencv.js 文件

    https://docs.opencv.org/{version}/opencv.js
    
  • 比如下载 4.5.5 版本的 opencv.js 文件

    https://docs.opencv.org/4.5.5/opencv.js
    

3. 安装使用

  1. HTML script 标签引入

    <!-- OpenCV.js 4.5.5 版本 -->
    <script src='https://docs.opencv.org/4.5.5/opencv.js'></script>
    
  2. node.js 使用

    // 加载 OpenCV.js
    function loadOpenCV(path) {
        return new Promise(resolve => {
            global.Module = {
                onRuntimeInitialized: resolve
            };
            global.cv = require(path);
        });
    }
    
    // 加载并创建一个图像
    async function run(path){
        await loadOpenCV(path)
        let img = new cv.Mat()
        img.delete()
    }
    
    // 设置文件路径
    const path = './opencv.js'
    
    // 运行
    run(path)
    

4. 数据类型

  • 图像数据类型

    • Mat 是 OpenCV 基础的图像数据结构,其数据类型对照表如下:

      Data Properties C++ Type JavaScript Typed Array Mat Type
      data uchar Uint8Array CV_8U
      data8S char Int8Array CV_8S
      data16U ushort Uint16Array CV_16U
      data16S short Int16Array CV_16S
      data32S int Int32Array CV_32S
      data32F float Float32Array CV_32F
      data64F double Float64Array CV_64F
    • MatVector 即多个 Mat 组成的向量,使用 push_back(mat: cv.Mat)、 get(index: number) 和 set(index: number, mat: cv.Mat)方法添加、读取和设置 Mat 至 MatVector 中

    • Mat 和 MatVector 类型的变量请在不再需要使用的时候使用 delete() 方法将其删除,否则该变量将会持续占用内存

    • 简单的创建和删除方式如下:

      // 创建一个 Mat
      let mat = new cv.Mat()
      
      // 创建一个 MatVector
      let matVector = new cv.MatVector()
      
      // 添加一个 Mat
      matVector.push_back(mat)
      
      // 获取 index 为 0 的 Mat 
      mat = matVector.get(0)
      
      // 设置 index 为 0 的 Mat 
      matVector.set(0, mat)
      
      // 删除 Mat
      mat.delete()
      
      // 删除 MatVector
      matVector.delete()
      
  • 其他数据类型及其对应的 JS 对象格式,创建变量时两种方式均可使用

    // 坐标点
    new cv.Point(x, y) = {
        x: number, 
        y: number
    }
    
    // 像素点
    new cv.Scalar(R, G, B, Alpha) = [
        R: number, 
        G: number, 
        B: number, 
        Alpha: number
    ]
    
    // 图像尺寸
    new cv.Size(width, height) = {
        width: number, 
        height: number
    }
    
    // 圆形区域
    new cv.Circle(center, radius) = {
        center: {
            x: number,
            y: number
        }, 
        radius: number
    }
    
    // 矩形区域
    new cv.Rect(x, y, width, height) = {
        x: number, 
        y: number, 
        width: number, 
        height: number
    }
    
    // 旋转矩形区域
    new cv.RotatedRect(center, size, angle) = {
        center: {
            x: number,
            y: number
        }, 
        size: {
            width: number, 
            height: number 
        },
        angle: number
    }
    

5. API

  • OpenCV.js 的 API 与 OpenCV C++ 版本 API 非常相似

  • OpenCV.js 常用的 API 如下:

    • 图像读取和显示

      // 读取
      cv.imread(dom) -> dst
      
      // 显示
      cv.imshow(dst, dom)
      
        dom(Dom/string): img 标签或其 id(读取) / canvas 标签或其 id(读取/显示)
      
        dst(cv.Mat): 图像(RGBA)
      
    • 创建图像

      // 创建一个 Mat 格式的图像
      new cv.Mat() -> mat
      new cv.Mat(size, type) -> mat
      new cv.Mat(rows, cols, type) -> mat
      new cv.Mat(rows, cols, type, scalar) -> mat
      
      
      // 创建一个值全部为零的图像
      cv.Mat.zeros(rows, cols, type) -> mat
      
      // 创建一个值全部为一的图像
      cv.Mat.ones(rows, cols, type) -> mat
      
      // 创建一个对角线值为一的图像
      cv.Mat.eye(rows, cols, type) -> mat
      
      // 使用 JS Array 生成图像
      cv.matFromArray(rows, cols, type, array) -> mat
      
      // 使用 canvas ImageData 生成图像
      cv.matFromImageData(imgData) - mat
      
        size(cv.size): 图像尺寸
        rows(number): 图像高度
        cols(number): 图像宽度
        type(number): 图像类型(cv.CV_8UC3 ...)
        scalar(cv.Scalar): 图像初始值
        array(Array): JS 图像数组
        imgData(ImageData): canvas 图像数据
      
        mat(cv.Mat): 图像(type)
      
    • 获取图像属性

      // 图像高度
      mat.rows -> rows
      
      // 图像宽度
      mat.cols -> cols
      
      // 图像尺寸
      mat.size() -> size
      
      // 图像通道数量
      mat.channels() -> channels
      
      // 图像数据类型
      mat.type() -> type
      
        mat(cv.Mat): 图像
      
        rows(number): 图像高度
        cols(number): 图像宽度
        size(cv.Size): 图像尺寸
        channles(number): 图像通道数量
        type(number): 图像数据类型(cv.CV_8UC3 ...)
      
    • 获取图像数据

      mat.data -> data
      mat.data8S -> data8S
      mat.data16U -> data16U
      mat.data16S -> data16S
      mat.data32S -> data32S
      mat.data32F -> data32F
      mat.data64F -> data64F
      
        mat(cv.Mat): 图像
      
        data(Uint8Array): 无符号 8 位整型数据
        data8S(Int8Array): 有符号 8 位整型数据
        data16U(Uint16Array): 无符号 16 位整型数据
        data16S(Int16Array): 有符号 16 位整型数据
        data32S(Int32Array): 有符号 32 位整型数据
        data32F(Float32Array): 32 位浮点数据
        data64F(Float64Array): 64 位浮点数据
      
    • 裁切图像

      mat.roi(rect) -> matROI
      
        rect(cv.Rect): 图像裁切区域
      
        matROI(cv.Mat): 裁切图像
      
    • 颜色空间转换

      cv.cvtColor(src, dst, code)
      
        src(cv.Mat): 输入图像
        dst(cv.Mat): 输出图像
        code(number): 转换类型(cv.COLOR_RGBA2RGB ...)
      
    • 图像缩放

      cv.resize(src, dst, dsize, fx, fy, interpolation)
      
        src(cv.Mat): 输入图像
        dst(cv.Mat): 输出图像
        dsize(cv.Size): 目标尺寸
        fx(number): x 轴缩放因子
        fy(number): y 轴缩放因子
        interpolation(number): 插值类型(cv.INTER_LINEAR ...)
      
    • 创建图像向量

      new cv.MatVector() -> matVector
      
        matVector(cv.MatVector): 图像向量
      
    • 图像向量操作

      // 添加
      matVector.push_back(mat)
      
      // 获取
      matVector.get(index) -> mat
      
      // 设置
      matVector.set(index, mat)
      
        matVector(cv.MatVector): 图像向量
      
        mat(cv.Mat): 图像
        index(number): 索引值
      
    • 通道拆分与合并

      // 拆分
      cv.split(src, channels)
      
      // 合并
      cv.merge(channels, dst)
      
        src(cv.Mat): 输入图像
        dst(cv.Mat): 输出图像
        channels(cv.MatVector): 通道图像向量
      
    • 删除对象

      // 删除图像对象
      mat.delete()
      
      // 删除图像向量对象
      matVector.delete()
      
        mat(cv.Mat): 图像
        matVector(cv.MatVector): 图像向量
      
    • 创建视频流

      new cv.VideoCapture(videoSource) -> cap
      
        videoSource(Dom/string): video 标签或其 id
      
        cap(cv.VideoCapture): 视频流
      
    • 读取视频帧

      cap.read(mat)
      
        cap(cv.VideoCapture): 视频流
      
        mat(cv.Mat): 图像
      
  • 更多 API 和详细信息请参考官方文档:OpenCV Docs

  • 更多示例代码请参考官方指南:OpenCV.js Tutorials文章来源地址https://www.toymoban.com/news/detail-563408.html

到了这里,关于OpenCV.js 快速入门指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫快速入门指南

    网络爬虫是一种自动化程序,可以在互联网上搜集和提取数据。Python作为一种功能强大且易学的编程语言,成为了许多爬虫开发者的首选。本文将为你提供一个关于Python爬虫的快速入门指南,包括基本概念、工具和实际案例。 在我们开始之前,有几个必要的准备工作需要完成

    2024年02月11日
    浏览(50)
  • JavaScript 入门指南(三)BOM 对象和 DOM 对象

    BOM(browser Object Model)即浏览器对象模型 BOM 由一系列对象组成,是访问、控制、修改浏览器的属性的方法 BOM 没有统一的标准(每种客户端都可以自定标准)。 BOM 的顶层是 window 对象 window 对象表示浏览器中打开的窗口。 使用 window 对象中的属性和方法,可以省略对象名,直

    2024年04月09日
    浏览(41)
  • Domo商业云平台快速入门指南

    Domo是 唯一一个结合了数据集成、实时和预测分析可视化数据、构建自身应用程序的云本机平台 。 利用业务生态系统和云,放大现有数据和应用程序的价值。 无论大小、数量或来源如何,Domo都可以连接数据。 Domo以与众不同的方式进行数据集成。 获得世界一流的数据治理和

    2024年01月22日
    浏览(39)
  • Bugzilla的快速入门指南(全网最详细)

    目录 一:在了解Bugzilla的使用前,先了解一些基本知识: 1.什么是Bugzilla 2.bug的来源 3.bug的生命周期 4.处理bug的所有角色: 5.一个bug的生命周期: 6.bugzilla使用时的基本流程图: 二:了解基本知识后,开始进入bugzilla的基本使用: 1.登录用户  2.创建用户 3.编写bug 填写bug的注意

    2024年02月01日
    浏览(44)
  • 【算法竞赛】蓝桥杯Python组快速入门指南

    该指南由GPT4编写,用于快速入门蓝桥杯Python组。当然,仅限入门而已 本指南由GPT-4(23年3月未阉割版)编写,曾帮助笔者半天内入门py,并较熟练完成一般难度的算法题目 一直以来笔者都是使用C++作为算法竞赛语言,但是奈何C++组太卷,笔者又太菜,于是另谋他路 Prompt模板

    2024年02月05日
    浏览(47)
  • TensorFlow 2.0 快速入门指南:第三部分

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则 2.3.c 在本节中,我们将研究许多 人工神经网络 ( ANN

    2023年04月16日
    浏览(46)
  • Elasticsearch入门指南——快速掌握全文搜索与分析

    作者:禅与计算机程序设计艺术 全文搜索引擎(Full-text search engine)也叫检索系统或者检索引擎,它是一个数据库应用程序,用来存储、处理和检索文字信息,并根据用户提交的查询语句从海量的文档中找到匹配的结果。最早起,它是基于搜索引擎技术诞生的,并广泛

    2024年02月08日
    浏览(51)
  • 关于 Python 爬虫 JS 逆向的入门指南

    请注意,这篇指南只是一个概述,为了深入理解和实践,你可能需要额外的学习和实践。         Python 爬虫经常遇到需要逆向 JavaScript 生成的网站内容和逻辑的情况。这种技能对于爬取动态网站,尤其是那些使用了复杂 JS 逻辑和反爬虫技术的网站,尤其重要。 Python 爬虫概

    2024年01月16日
    浏览(43)
  • Shell编程——弱数据类型的脚本语言快速入门指南

    目录 Linux Shell 数据类型 变量类型 运算符 算术运算符 赋值运算符 拼接运算符 比较运算符 关系运算符 控制结构 顺序结构 条件分支结构 if 条件语句 case 分支语句  循环结构 for 循环 while 循环 until 循环 break 语句 continue语句 函数 函数定义  函数名 函数体 返回值 参数 函数的

    2024年02月12日
    浏览(72)
  • CIFS协议入门指南:快速部署文件共享服务器

    数据来源  本文涉及NTFS权限的知识,不熟悉的可以先看这篇文章         通过网络提供文件共享服务,提供文件下载和上传服务(类似于FTP服务器)         方法: 文件夹右键属性 -- 共享 -- 开启共享 -- 设置共享名 -- 设置共享权限         注:            

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包