当前位置:首页 > JavaScript

cvfindcontours js实现

2026-04-05 16:48:04JavaScript

cv.findContours 的 JavaScript 实现

在 JavaScript 中实现类似 OpenCV 的 findContours 功能,可以使用 HTML5 的 Canvas API 或第三方库(如 OpenCV.js)。以下是两种实现方式:

使用 OpenCV.js

  1. 加载 OpenCV.js 库 在 HTML 文件中引入 OpenCV.js:

    <script async src="https://docs.opencv.org/4.5.5/opencv.js" onload="onOpenCvReady();"></script>
  2. 实现 findContours

    function findContours() {
     let src = cv.imread('inputImage');
     let dst = new cv.Mat();
     let contours = new cv.MatVector();
     let hierarchy = new cv.Mat();
    
     cv.cvtColor(src, src, cv.COLOR_RGBA2GRAY);
     cv.threshold(src, dst, 120, 200, cv.THRESH_BINARY);
     cv.findContours(dst, contours, hierarchy, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE);
    
     // 绘制轮廓
     for (let i = 0; i < contours.size(); ++i) {
         let color = new cv.Scalar(0, 255, 0);
         cv.drawContours(src, contours, i, color, 2, cv.LINE_8, hierarchy, 0);
     }
    
     cv.imshow('outputCanvas', src);
     src.delete(); dst.delete(); contours.delete(); hierarchy.delete();
    }

使用纯 JavaScript 和 Canvas

  1. 获取图像数据

    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  2. 实现轮廓查找算法

    cvfindcontours js实现

    function findContours(imageData) {
     const width = imageData.width;
     const height = imageData.height;
     const data = imageData.data;
     const visited = new Array(width * height).fill(false);
     const contours = [];
    
     for (let y = 0; y < height; y++) {
         for (let x = 0; x < width; x++) {
             const index = y * width + x;
             if (data[index * 4] < 128 && !visited[index]) {
                 const contour = [];
                 const stack = [[x, y]];
                 visited[index] = true;
    
                 while (stack.length > 0) {
                     const [cx, cy] = stack.pop();
                     contour.push([cx, cy]);
    
                     for (let dy = -1; dy <= 1; dy++) {
                         for (let dx = -1; dx <= 1; dx++) {
                             const nx = cx + dx;
                             const ny = cy + dy;
                             if (nx >= 0 && nx < width && ny >= 0 && ny < height) {
                                 const nIndex = ny * width + nx;
                                 if (data[nIndex * 4] < 128 && !visited[nIndex]) {
                                     visited[nIndex] = true;
                                     stack.push([nx, ny]);
                                 }
                             }
                         }
                     }
                 }
                 contours.push(contour);
             }
         }
     }
     return contours;
    }

注意事项

  • OpenCV.js 需要从官方 CDN 加载,文件较大(约 8MB),适合需要完整 OpenCV 功能的场景。
  • 纯 JavaScript 实现适用于简单轮廓检测,但性能和精度可能不如 OpenCV.js。
  • 两种方法均需在浏览器中运行,不支持 Node.js 环境。

分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…