乐闻世界logo
搜索文章和话题

OpenCV.js 中常用的图像处理操作有哪些?

3月6日 21:36

OpenCV.js 提供了丰富的图像处理功能,以下是常用的图像处理操作:

1. 颜色空间转换

javascript
// RGBA 转灰度 cv.cvtColor(src, dst, cv.COLOR_RGBA2GRAY); // RGBA 转 RGB cv.cvtColor(src, dst, cv.COLOR_RGBA2RGB); // RGB 转 HSV cv.cvtColor(src, dst, cv.COLOR_RGB2HSV);

2. 图像滤波

高斯模糊

javascript
let ksize = new cv.Size(5, 5); cv.GaussianBlur(src, dst, ksize, 0, 0, cv.BORDER_DEFAULT);

中值滤波

javascript
cv.medianBlur(src, dst, 3); // 3 是核大小

双边滤波(保持边缘)

javascript
cv.bilateralFilter(src, dst, 9, 75, 75);

3. 边缘检测

Canny 边缘检测

javascript
cv.Canny(src, dst, 50, 100, 3, false); // 参数:源图像、目标图像、低阈值、高阈值、Sobel 核大小、L2 梯度

Sobel 边缘检测

javascript
cv.Sobel(src, dst, cv.CV_8U, 1, 0, 3, 1, 0, cv.BORDER_DEFAULT); // 参数:源、目标、深度、dx、dy、核大小、缩放因子、delta、边界类型

4. 图像变换

缩放

javascript
let dsize = new cv.Size(300, 300); cv.resize(src, dst, dsize, 0, 0, cv.INTER_LINEAR);

旋转

javascript
let center = new cv.Point(src.cols / 2, src.rows / 2); let M = cv.getRotationMatrix2D(center, 45, 1); // 中心、角度、缩放 cv.warpAffine(src, dst, M, dsize, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());

仿射变换

javascript
let srcTri = cv.matFromArray(3, 1, cv.CV_32FC2, [0, 0, src.cols-1, 0, 0, src.rows-1]); let dstTri = cv.matFromArray(3, 1, cv.CV_32FC2, [0, 0, src.cols-1, 0, 0, src.rows-1]); let M = cv.getAffineTransform(srcTri, dstTri); cv.warpAffine(src, dst, M, dsize, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());

5. 阈值处理

javascript
// 二值化 cv.threshold(src, dst, 127, 255, cv.THRESH_BINARY); // 自适应阈值 cv.adaptiveThreshold(src, dst, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2);

6. 形态学操作

javascript
// 腐蚀 let M = cv.Mat.ones(3, 3, cv.CV_8U); cv.erode(src, dst, M); // 膨胀 cv.dilate(src, dst, M); // 开运算(先腐蚀后膨胀) cv.morphologyEx(src, dst, cv.MORPH_OPEN, M); // 闭运算(先膨胀后腐蚀) cv.morphologyEx(src, dst, cv.MORPH_CLOSE, M);

7. 图像算术运算

javascript
// 加法 cv.add(src1, src2, dst); // 减法 cv.subtract(src1, src2, dst); // 乘法 cv.multiply(src1, src2, dst); // 按位与 cv.bitwise_and(src1, src2, dst); // 按位或 cv.bitwise_or(src1, src2, dst);

完整示例:图像处理流程

javascript
function processImage(src) { let dst = new cv.Mat(); let gray = new cv.Mat(); let edges = new cv.Mat(); try { // 转灰度 cv.cvtColor(src, gray, cv.COLOR_RGBA2GRAY); // 高斯模糊 cv.GaussianBlur(gray, gray, new cv.Size(5, 5), 0); // Canny 边缘检测 cv.Canny(gray, edges, 50, 100); // 显示结果 cv.imshow('canvasOutput', edges); } finally { gray.delete(); edges.delete(); dst.delete(); } }
标签:Opencv.js