仅用于记录学习过程
阶段 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_AUTOBUILD 1 OPENCV_INCLUDE_DIR E:\opencv-4.5.5-vc16\build\include OPENCV_LIB_DIR E:\opencv-4.5.5-vc16\build\x64\vc16\lib OPENCV_BIN_DIR E:\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();
运行说明:
- 准备一张测试图片(如
test.jpg),放在与脚本同一目录; - 终端执行
node read-image-info.js; - 成功输出示例:
图片信息: 宽度:800px 高度:600px 通道数:3(彩色图(BGR)) - 若报错“无法找到图片”,检查路径是否正确;若报错“OpenCV库未找到”,确认系统已安装OpenCV且环境变量配置正确。
5998

被折叠的 条评论
为什么被折叠?



