nodejs 环境下使用opencv处理图像(三)

4 篇文章 0 订阅

一、感兴趣区域

const {imread,imshow,Rect,waitKey,COLOR_RGB2GRAY,COLOR_GRAY2BGR} = require('opencv4nodejs');
let src = imread('./imge/1.jpg') //原始图
imshow('first',src) //展示
let region = src.getRegion(new Rect(200, 200, 200, 200)); //在图像200,200的位置截取图像长度为200*200的图像
imshow('secondes',region) //展示
let region1= region.cvtColor(COLOR_RGB2GRAY)//转化为灰度图,生成的的灰度图是单通道图像
imshow('region1',region1)//展示
let region2 = region1.cvtColor( COLOR_GRAY2BGR)  //将单通道图像转换为三通道RGB灰度图,因为只有三通道的backface才可以赋给三通道的src
for(let i =0;i<200;i++){
    for(let j =0;j<200;j++){
    src.set(i+200,j+200,region2.at(i,j))
 }
}
imshow('region1',src)
waitKey()

二、泛洪填充(彩色)

const {imread,imshow,Rect,waitKey,Mat,FLOODFILL_FIXED_RANGE,Point2,Vec3,CV_8UC1} = require('opencv4nodejs')
const src = imread('./imge/1.jpg');
imshow('input_image', src);
const src1 =src.copy(); //拷贝一份
const {rows,cols} =src;
const  msk =new Mat(rows+2,cols+2,CV_8UC1)
const newsrc1 =new Point2(220, 250);
 /*
 * seedPoint 参数表示泛洪算法(漫水填充算法)的起始点
 * newVal:Vec3 类型  (0, 255, 255)
 * mask:mat类型 参数表示掩码,该掩码是单通道8位图像,比image的高度多2个像素,宽度多2个像素。填充时不能穿过输入掩码中的非零像素。
 * loDiff?: Vec3, 参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之负差的最大值。
 * upDiff?: Vec3,参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之正差的最大值。
 * flags?: number flags参数:操作标志符
 * */
src1.floodFill(newsrc1,
    new Vec3(0, 0, 255),
    msk,
    new Vec3(100, 100, 100)
    ,new Vec3(50, 50 ,50),
    FLOODFILL_FIXED_RANGE)
imshow("fill_color_demo", src1)
waitKey(0)

三、泛洪填充(二值图)

const {imshow,waitKey,Mat,Vec3,CV_8UC3,CV_8UC2,CV_8UC1,Point2} = require('opencv4nodejs')
//创建一个三通道的400*400的颜色值为【0,0,0】的图像
const img = new Mat(400, 400,CV_8UC3,[0,0,0])
//在起点100,100处画一个长宽为300的填充区域; i*j为长宽,(i/j)+numb 为起点
for(let i =0;i<200;i++){
    for(let j =0;j<200;j++){
        img.set(i+100,j+100,[255,255,255])
    }
}
// imshow("img2", img)
//以上完成了第一步
/******第二部分*******/
// 创建一个长宽为400,每个数组长度为三,值为1的矩阵 单通道矩阵
let  mask2 = new Mat(402,402,CV_8UC1,1)
// imshow("mask2", mask2)
for(let i =0;i<201;i++){
    for(let j =0;j<201;j++){
        mask2.set(i+101,j+101,0)
    }
}
//seedPoint 起点
const  seedPoint = new Point2(200,200)
//newVal 要填充的值
const newVal = new Vec3(255,0,0)
img.floodFill(seedPoint,newVal,mask2)
imshow("mask3", img)
waitKey()

四、滤波和而模糊操作

const {imread,waitKey,imshow,Size,Mat,CV_8U,CV_8UC1,CV_8UC2,CV_32F,CV_32FC1} = require('opencv4nodejs')
const img = imread('./imge/Lenna.png')
imshow('img',img)
// 均值模糊  去随机噪声有很好的去燥效果
const blur = img.blur(new Size(1,15))//(1, 15)是垂直方向模糊,(15, 1)还水平方向模糊
imshow('blur',blur)
//中值模糊  对椒盐噪声有很好的去燥效果
const  ImgmedianBlur= img.medianBlur(5)
imshow("ImgmedianBlur",ImgmedianBlur)
// 用户自定义模糊
// 创建一个5*5矩阵数值是float32类型
const kernel = new Mat(5,5,CV_32FC1,1/25)
const Imgfilter2D = img.filter2D(-1,kernel)
imshow("Imgfilter2D",Imgfilter2D)
waitKey()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值