当前位置: 代码迷 >> 综合 >> 003-图像的掩膜操作(filter2D)
  详细解决方案

003-图像的掩膜操作(filter2D)

热度:59   发布时间:2023-12-14 09:44:33.0

目录

  • 一、图像的掩膜操作(filter2D)
    • 1、掩膜的定义
    • 2、API
  • 二、全部代码
  • 三、结果展示
  • 四、结论

一、图像的掩膜操作(filter2D)

1、掩膜的定义

接下来我们讲掩膜操作,我们用数字模拟一个图像,左边是一个10*10的图像矩阵,右边是一个掩膜,他们两个做操作。

首先,左边黄色的3*3方块与掩膜对应位置相乘,求得的值,存放在新图像上的对应于原图上的中心位置的中间的位置。就像下图一样:

下图的操作是:
5 * 0 + 5 * (-1) + 5 * 0 + 5 * (-1) + 5 * 5 + 5 * (-1) + 5 * 0 + 5 * (-1) + 5 * 0 = 5
在这里插入图片描述
在这里插入图片描述

2、API

掩膜操作的API是filter2D,函数原型是:

void filter2D( InputArray src, OutputArray dst, int ddepth,                            InputArray kernel, Point anchor = Point(-1,-1),                            double delta = 0, int borderType = BORDER_DEFAULT 
);

函数参数含义如下:

(1)InputArray类型的src ,输入图像。(2)OutputArray类型的dst ,输出图像,图像的大小、通道数和输入图像相同。(3)int类型的ddepth,目标图像的所需深度。(4)InputArray类型的kernel,卷积核(或者更确切地说是相关核)是一种单通道浮点矩阵;如果要将不同的核应用于不同的通道,请使用split将图像分割成不同的颜色平面,并分别对其进行处理。。(5)Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。。(6)double类型的delta,在将筛选的像素存储到dst中之前添加到这些像素的可选值。说的有点专业了其实就是给所选的像素值添加一个值delta。(7)int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT。

常见用法:

	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D(src, dst, src.depth(), kernel);

二、全部代码

#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;int main() {
    Mat src, dst;src = imread("F:\\VS_Project\\images\\iu.jpeg");if (!src.data) {
    printf("could not load image..\n");return -1;}namedWindow("src", 1);Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D(src, dst, src.depth(), kernel);imshow("src", src);imshow("dst", dst);waitKey(0);return 0;
}

三、结果展示

在这里插入图片描述

四、结论

掩膜操作实现图像对比度调整。