opencv学习笔记(三)——掩膜操作(C++)

掩膜操作增强图像对比度
本文介绍如何通过掩膜操作调整图像对比度,包括自定义滤波器实现及使用OpenCV API简化流程。展示了利用特定掩膜矩阵计算像素值的具体步骤,并对比了自定义实现与API应用的效果。

1 . 定义

掩膜操作是指根据掩膜矩阵(也称作核kernel)重新计算图像中每个像素的值。掩膜矩阵中的值表示了邻近像素值(包括该像素自身的值)对新像素值有多大的影响。从数学的观点来看,我们用自己设置的权值,对像素领域内的值做了个加权平均。
比如,下面这个公式表示用5倍当前像素的值减去该像素上、下、左、右四个像素值和,得到的结果赋值给当前像素。使用该公式可以用于提升图像的对比度。调节I(i,j)的系数权重可以得到不同的对比度提升效果。

I(i,j)=5I(i,j)[I(i−1,j)+I(i+1,j)+I(i,j−1)+I(i,j+1)]

上面的公式可以用掩膜矩阵表示成如下的形式。
在这里插入图片描述

2. 自定义的滤波器实现

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
   
   
	Mat img, dst;
	img = imread("D:/VS项目/opencv3/1.jpg", IMREAD_UNCHANGED);
	//如果没有读取到图像信息,直接退出
	
### OpenCV C++ 学习教程概述 OpenCV 是一个强大的开源计算机视觉库,支持多种编程语言,其中 C++ 是其主要开发语言之一。以下是关于如何通过 OpenCVC++ 功能进行学习的相关资源和知识点。 #### 图像基本操作 图像的基本读取、显示以及保存功能是 OpenCV 中最基础的部分。可以通过 `imread` 函数加载图片,并利用 `imshow` 和 `imwrite` 来展示和存储处理后的结果[^1]。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("example.jpg"); if (image.empty()) return -1; namedWindow("Example", WINDOW_AUTOSIZE); imshow("Example", image); waitKey(0); // Wait for key press imwrite("output_image.png", image); } ``` #### 图像融合技术 为了实现两幅图像的平滑过渡或者叠加效果,可以使用 `addWeighted()` 方法完成加权平均混合的操作[^2]。此方法接受两个输入矩阵及其权重参数 α 和 β,还有一个偏移量 γ。 ```cpp Mat blendedImage; double alpha = 0.7; double beta = 0.3; double gamma = 0.0; addWeighted(src1, alpha, src2, beta, gamma, blendedImage); ``` #### 腐蚀与膨胀操作 形态学中的腐蚀(Erosion)和膨胀(Dilation)用于改变二值化图像中对象形状大小。这些变换通常依赖于结构元素(Kernel)。创建自定义核可通过调用 `getStructuringElement` 完成[^3]。 ```cpp Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(5, 5)); erode(image, erodedImage, kernel); dilate(erodedImage, dilatedImage, kernel); ``` #### 形态学高级应用——顶帽黑帽运算 除了简单的腐蚀膨胀外,还有更复杂的形态学转换如顶帽(Tophat)和黑帽(Blackhat),分别提取亮区域细节或暗区域特征[^4]。具体表达式如下所示: - **TopHat**: \(dst = src - open(src)\) - **BlackHat**: \(dst = close(src) - src\) ```cpp morphologyEx(image, topHatResult, MORPH_TOPHAT, kernel); morphologyEx(image, blackHatResult, MORPH_BLACKHAT, kernel); ``` 以上内容涵盖了从入门到深入理解 OpenCV 库所需掌握的核心概念和技术要点。希望对你有所帮助!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WFForstar

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

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

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

打赏作者

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

抵扣说明:

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

余额充值