OpenCV基础入门1

仅用于记录学习过程

阶段 1:环境搭建与 OpenCV 基础认知(1-2 天)

  • 核心目标:确保 Node 环境能正常运行 OpenCV,理解 OpenCV 的核心作用和图像的基本表示方式。

  • 理论要点:

    • 什么是 OpenCV:开源视觉库的定位、核心功能模块(图像处理、特征检测等)。
    • 数字图像基础:像素、分辨率、图像矩阵(如何用数字表示图像)、通道(RGB/BGR 区别,为什么 OpenCV 默认 BGR)。
  • 实践任务:

    • 环境验证与库安装:
      确认 VS2022 的 C++ 编译工具已安装(打开 VS Installer,勾选 “使用 C++ 的桌面开发”)。

    • 安装 OpenCV 系统依赖:
      下载 Windows 版 OpenCV(官网,选择 4.x 版本),解压后,需要添加以下信息到系统环境变量。(目的是npm install @u4/opencv4nodejs远程下载opencv访问国外地址,网络不稳定极易报错;手动指定本地opencv)

    变量名变量值(替换为你的实际路径)
    OPENCV4NODEJS_DISABLE_AUTOBUILD1
    OPENCV_INCLUDE_DIRE:\opencv-4.5.5-vc16\build\include
    OPENCV_LIB_DIRE:\opencv-4.5.5-vc16\build\x64\vc16\lib
    OPENCV_BIN_DIRE:\opencv-4.5.5-vc16\build\x64\vc16\bin
    • 安装 Node.js 库:npm install @u4/opencv4nodejs(这是维护较活跃的分支)。
      编写第一个程序:读取一张图片并显示基本信息(宽、高、通道数)。

    • 图像的基本操作:
      用cv.imread()读取图像,cv.imwrite()保存图像。
      打印图像矩阵数据(理解 “图像即矩阵”),获取单个像素值。

1. OpenCV 的定位与核心功能模块

OpenCV(Open Source Computer Vision Library)是一个跨平台的开源计算机视觉库,定位是为开发者提供高效、可复用的视觉处理工具,封装了大量计算机视觉算法,避免重复开发底层逻辑。

核心功能模块包括:

  • 图像处理:缩放、旋转、滤波、阈值分割等基础操作;
  • 特征检测与匹配:ORB、SIFT等算法提取图像特征点,实现图像匹配;
  • 目标检测与跟踪:Haar级联、KCF等算法定位和追踪物体;
  • 视频分析:视频读写、帧处理、运动检测;
  • 相机校准与三维视觉:消除镜头畸变、立体视觉深度计算;
  • 机器学习集成:支持传统分类器(如SVM)和深度学习模型推理。

2. 数字图像基础概念

  • 像素:图像的最小单位,本质是一个“颜色数值”(如RGB值),图像由无数像素组成。
  • 分辨率:图像的像素数量(宽×高),如1920×1080表示宽1920像素、高1080像素。
  • 图像矩阵:图像在计算机中以矩阵形式存储,例如:
    • 灰度图是二维矩阵(宽×高),每个元素代表像素的亮度(0-255,0为黑,255为白);
    • 彩色图是三维矩阵(宽×高×通道),每个通道对应一种颜色分量。
  • 通道
    • RGB:由红(R)、绿(G)、蓝(B)三个通道组成,是显示器的颜色标准;
    • BGR:OpenCV默认的颜色格式,与RGB的区别是通道顺序相反(蓝、绿、红)。
    • 为什么OpenCV默认BGR?历史原因:早期摄像头传感器的输出格式是BGR,OpenCV为了兼容硬件沿用了这一格式。

3. 为什么需要下载OpenCV?@u4/opencv4nodejs是否内置OpenCV?

  • OpenCV需要下载的原因:它是一个底层C++库,包含大量编译后的二进制文件(算法实现)和头文件,程序运行时需要调用这些文件,因此必须先在系统中安装。

  • @u4/opencv4nodejs不内置OpenCV,它是OpenCV的Node.js“绑定库”(相当于“翻译器”),作用是将C++实现的OpenCV功能转换为Node.js可调用的API。因此,它必须依赖系统中已安装的OpenCV才能工作,否则会报错“找不到OpenCV依赖”。

4. 第一个程序:读取图片并显示基本信息

以下代码使用@u4/opencv4nodejs读取图片,打印宽、高、通道数,并处理可能的错误(如文件不存在)。

const cv = require('@u4/opencv4nodejs');
const path = require('path');

// 图片路径(替换为你的图片路径,如'./test.jpg')
const imagePath = path.resolve(__dirname, 'test.jpg');

async function getImageInfo() {
  try {
    // 读取图片(支持JPG、PNG等格式)
    // imreadAsync是异步方法,返回图像矩阵对象
    const img = await cv.imreadAsync(imagePath);

    // 获取基本信息
    const width = img.cols;    // 宽度(列数)
    const height = img.rows;   // 高度(行数)
    const channels = img.channels;  // 通道数(彩色图通常为3,灰度图为1)

    // 打印信息
    console.log('图片信息:');
    console.log(`宽度:${width}px`);
    console.log(`高度:${height}px`);
    console.log(`通道数:${channels}(${channels === 3 ? '彩色图(BGR)' : '灰度图'})`);

  } catch (err) {
    // 处理错误(如文件不存在、格式错误)
    console.error('处理失败:', err.message);
  }
}

// 执行函数
getImageInfo();

运行说明:

  1. 准备一张测试图片(如test.jpg),放在与脚本同一目录;
  2. 终端执行node read-image-info.js
  3. 成功输出示例:
    图片信息:
    宽度:800px
    高度:600px
    通道数:3(彩色图(BGR))
    
  4. 若报错“无法找到图片”,检查路径是否正确;若报错“OpenCV库未找到”,确认系统已安装OpenCV且环境变量配置正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值