(11)Air Band OpenCV2.4.13_矩阵掩码操作

本文介绍如何使用OpenCV进行图像锐化处理。通过自定义掩码矩阵并应用到图像中,实现对图像细节的增强效果。具体展示了掩码操作的基本方法及filter2D函数的应用。

本文是对OpenCV2.4.13文档的部分翻译,作个人学习之用,并不完整。

掩码操作的核心思想就是根据掩码矩阵(kernel)重计算图像中的每个值。掩码矩阵中的值会隐含对邻近像素由多大影响。从数学角度看就是使用我们指定的值来做加权平均值。

mask

基本方法:

void Sharpen(const Mat& myImage, Mat& Result)
{
	CV_Assert(myImage.depth() == CV_8U); //只接受char类型图像
	Result.create(myImage.size(), myImage.type());//创建与输入图像相同类型和大小的输出图像
	const int nChannels = myImage.channels();
	for(int j = 1; j < myImage.rows - 1; ++j)
	{
		const uchar* previous = myImage.ptr<uchar>(j - 1);
		const uchar* current = myImage.ptr<uchar>(j );
		const uchar* next = myImage.ptr<uchar>(j + 1);//需要三个指针同时访问三行
		uchar* output = Result.ptr<uchar>(j);
		for(int i = nChannels; i < nChannels * (myImage.cols - 1); ++i)
		{
			*output++ = saturate_cast<uchar>(5 * current[i]-current[i - nChannels] - current[i + nChannels] - previous[i] - next[i]);//用[]直接访问,每次操作后通过移动指针往后1字节
		}
	}
	Result.row(0).setTo(Scalar(0));
	Result.row(Result.rows - 1).setTo(Scalar(0));
	Result.col(0).setTo(Scalar(0));
	Result.col(Result.cols - 1).setTo(Scalar(0));//图像边缘不采用掩码,可以直接设置值
}


filter2D函数:

直接应用掩码矩阵

Mat kern=(Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
filter2D(I,K,I.depth(),kern);//指定输入、输出和掩码矩阵,可以有第五个参数来制定掩码矩阵的中心,第六个参数决定在区域内要做什么



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值