[OpenCV]数字图像处理c++学习——02mask矩阵掩膜附完整代码(小白入门篇)

前言

​ 在数字图像处理中,矩阵掩膜(或卷积核)是一个关键概念,它通过在图像的每个像素上应用特定的操作来实现各种效果,如模糊、锐化和边缘检测等。在 OpenCV 中,使用矩阵掩膜可以轻松实现这些操作,并对图像进行定制化的处理。在这篇博客中,我们将介绍矩阵掩膜的基本原理,并通过 C++ 代码示例,展示如何在 OpenCV 中应用矩阵掩膜进行图像处理。如有错误请多多包涵。

矩阵掩膜

​ 矩阵掩膜,也称为卷积核或滤波器,是一个小的、通常为正方形的矩阵。这个矩阵在图像上进行移动,并在每个位置与图像的对应区域进行逐元素乘积运算,然后将结果进行求和,得到新的像素值。通过这种操作,矩阵掩膜可以在图像中实现各种效果,如模糊、锐化和边缘检测等。

​ 在 OpenCV 中,可以使用 cv::filter2D 函数来应用矩阵掩膜。该函数允许你指定一个卷积核,并将其应用到图像上,从而产生新的处理后的图像。

1.读取图像

图片链接实验图片下载链接
先读取图像用于后面的操作

	Mat src, dst;
	src = imread("sherlock.jpg");
	if (!src.data) {
		printf("could not find the image...\n");
		return;
	}
	namedWindow("input image", cv::WINDOW_AUTOSIZE);
	cv::imshow("input image", src);

2.创建卷积核

(1)模糊核:这里定义了一个 3x3 的模糊核,每个元素的值均为 1/9。这种核用于对图像进行平均模糊处理。

	Mat blur_kernel = (cv::Mat_<float>(3, 3) << 1, 1, 1, 1, 1, 1, 1, 1, 1) / 9;

(2)锐化核:锐化核是一个常用于增强图像边缘的矩阵,它能够突出图像中的细节。

	cv::Mat sharpen_kernel = (cv::Mat_<float>(3, 3) << 
          0, -1,  0, 
         -1,  5, -1, 
          0, -1,  0);

3.应用掩膜并显示结果

filter2D:用于对图像应用卷积操作。将定义的卷积核(即矩阵掩膜)应用到图像上,从而执行滤波操作。

	filter2D(src, dst, -1, blur_kernel);
	namedWindow("blur image", cv::WINDOW_AUTOSIZE);
	cv::imshow("blur image", dst);

	filter2D(src, dst, -1, sharpen_kernel);
	namedWindow("sharpen image", cv::WINDOW_AUTOSIZE);
	cv::imshow("sharpen image", dst);

锐化图像 result
在这里插入图片描述

完整代码

#include<opencv2/opencv.hpp>
#include<highgui.hpp>

using namespace cv;
using namespace std;

void matrix_mask()
{
	Mat src, dst;
	src = imread("sherlock.jpg");
	if (!src.data) {
		printf("could not find the image...\n");
		return;
	}
	namedWindow("input image", cv::WINDOW_AUTOSIZE);
	cv::imshow("input image", src);
	
	//模糊核    图像平滑,细节减少
	Mat blur_kernel = (cv::Mat_<float>(3, 3) << 1, 1, 1, 1, 1, 1, 1, 1, 1) / 9;
	//锐化核    边缘突出,细节更加清晰
	Mat sharpen_kernel = (cv::Mat_<float>(3, 3) << 
		0, -1, 0,
		-1, 5, -1,
		0, -1, 0);
	filter2D(src, dst, -1, blur_kernel);  // 应用掩膜并显示结果
	namedWindow("blur image", cv::WINDOW_AUTOSIZE);
	cv::imshow("blur image", dst);

	filter2D(src, dst, -1, sharpen_kernel);
	namedWindow("sharpen image", cv::WINDOW_AUTOSIZE);
	cv::imshow("sharpen image", dst);
	waitKey(0);
}
int main() 
{
	matrix_mask(); 
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mirror_zAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值