欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

opencv学习(二)-矩阵的掩码操作

程序员文章站 2023-12-23 17:11:22
...

矩阵的掩码操作

根据掩码矩阵(也称作核)重新计算图像中每个像素的值。掩码矩阵中的值表示近邻像素值(包括该像素自身的值)对新像素值有多大影响。从数学观点看,我们用自己设置的权值,对像素邻域内的值做了个加权平均。

对图像的每个像素应用下面的公式:

opencv学习(二)-矩阵的掩码操作

即:每个像素 = 该像素*5 - 相邻上下左右的像素的和

原始算法按照这个公式边界值是计算不了的,因为会访问到旁边不存在的元素,需要将边界元素设置成 0

那么,图像矩阵经过这个操作后会发生什么呢?

假设中间像素是很亮的话,显然经过运算会更亮。中间元素亮度低的话,经过运算就会更暗。因此经过这个运算后图像对比度会增强,亮的更亮,暗的更暗

下面的函数就是将原图像和掩码矩阵进行卷积运算

Mat.filter2D(ddepth: number, kernel: Mat, anchor?: Point2, delta?: number, borderType?: number): Mat

const cv = require("opencv4nodejs");
const input = cv.imread("../../data/Lenna.png");

// 掩码矩阵
// 必须是单通道浮点型矩阵
const kernel = new cv.Mat([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], cv.CV_32FC1);

const output = input.filter2D(input.depth, kernel);

cv.imshow("input", input);
cv.imshow("output", output);
cv.waitKey();

函数参数解释

  • ddepth 图像深度
  • kernel 卷积核(或者是相关核),一个单通道浮点型矩阵。如果想在图像不同的通道使用不同的 kernel,可以先使用split函数将图像通道事先分开。
  • anchor 内核的基准点(anchor),其默认值为(-1,-1)说明位于 kernel 的中心位置。基准点即 kernel 中与进行处理的像素点重合的点。
  • delta 在储存目标图像前可选的添加到像素的值,默认值为 0
  • borderType 像素向外逼近的方法,默认值是 BORDER_DEFAULT,即对全部边界进行计算。

opencv学习(二)-矩阵的掩码操作

tips:

上一篇:

下一篇: