一、感兴趣区域
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()