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

2020-01-14 17:56:20 浏览数 (1)

矩阵的掩码操作

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

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

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

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

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

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

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

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

代码语言:javascript复制
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,即对全部边界进行计算。

tips:

  • 卷积运算理解

0 人点赞