基于Opencv.js + Node.js给图片指定区域打码(高斯模糊)

407 阅读1分钟

话不多说,直接上代码:

const cv = require('opencv.js');  
const fs = require('fs');  
const Jimp = require('jimp');  
const path = require('path');

async function getBlur(){  
    let jimpSrc = await Jimp.read(path.join(__dirname,'test.jpg'));  
    // Create a matrix from image. input image expected to be in RGBA format  
    let src = cv.matFromImageData(jimpSrc.bitmap);  

    let dst = new cv.Mat();  
    // 获取模糊区域(根据业务调整)  
    let rect = new cv.Rect(100,100,100,100);  
    let roiImage = src.roi(rect);  
    // 高斯模糊  
    let ksize = new cv.Size(11,11);  
    cv.GaussianBlur(roiImage,dst,ksize,10,10,cv.BORDER_DEFAULT);  
    // 模糊后图像的ROI放回原始图像  
    dst.copyTo(src.roi(rect))  
    // Save the result  
    let raw_data = {  
    data: src.data,  
    width: src.size().width,  
    height: src.size().height  
    };  
    const image = await new Jimp(raw_data);  
    const file = "out_image." + image.getExtension();  
    await image.writeAsync(file);  
    // 释放内存  
    src.delete();  
    dst.delete();  
}
module.exports = {  
    getBlur
}

效果:

  • 原图 test.jpg
  • 添加模糊后(左上位置) out_image.png