图像处理之其他杂项(六)之Mat格式图像处理相关小事(像素越界,边界处理)

本文探讨了在Mat格式图像处理中遇到的像素越界和边界处理问题。对于单通道灰度图,像素以<uchar>格式存储,可以使用CV_8U或CV_8UC1声明。在进行平滑滤波时,当处理边界像素时,可能会超出图像范围。通常情况下,程序会自动填充超出的像素,但这种填充并不总是适用,有时会导致错误。文章通过示例展示了数据填充的情况,并指出需要具体问题具体分析。
摘要由CSDN通过智能技术生成

              图像处理之其他杂项(六)之Mat格式图像处理相关小事(像素越界,边界处理)

 

以现阶段知识水平总结,结论不一定正确

一、 像素存储

1.Mat图像单通道灰度图声明type可以是CV_8U,也可是CV_8UC1。。

  如:

Mat originImage (5,5,CV_8U,1);
Mat originImage (5,5,CV_8UC1,1);

              生成Mat如:

              2.灰度Mat中对应像素数值的存储是以<uchar>格式存储的,若按<uchar>数据提取:

 

	Mat originImage(5, 5, CV_8UC1,1);
	for (int i = 0; i < originImage.rows; i++)
	{
		for (int j = 0; j < originImage.cols; j++)
		{
			cout << originImage.at<uchar>(i, j) << "  ";
		}
		cout << endl;
	}

输出结果如下:

3. 若按<int>数据直接提取:

	Mat originImage(5, 5, CV_8UC1,1);
	for (int i = 0; i < originImage.rows; i++)
	{
		for (int j = 0; j < originImage.cols; j++)
		{
			cout << originImage.at<int>(i, j) << "  ";
		}
		cout << endl;
	}

结果如下:

4.按<uchar>转<int>提取

 

	Mat originImage(5, 5, CV_8UC1,1);
	for (int i = 0; i < originImage.rows; i++)
	{
		for (int j = 0; j < originImage.cols; j++)
		{
			int x = originImage.at<uchar>(i, j);
			cout <<x << "  ";
		}
		cout << endl;
	}

结果如下:

二、像素越界 

在查看平滑滤波相关知识的时候涉及一个问题,以一个3*3的滤波掩模去平滑图像时,当中心像素位于图像最外边界一圈时,处理的像素超出了图像范围(图1,以图像最左上角单个像素(0,0)为例),这时正常数据应该是溢出或越界了,但真实操作没有什么影响,程序会对超出图像范围的数据进行默认填充(具体原理未知,有待进一步研究,

(后续补充:这个地方说的数据填充存在不确定性,有些情况适用,有些情况程序会报错,具体情况具体分析)

在图1中,红框为原有3*3大小图像,以3*3掩模平滑图像时,先对像素(0,0)进行操作,此时共有5个像素超出边界,但能正常处理,像素填充如图2。

图1

 

查看数据填充代码如下:

	Mat originImage (3,3,CV_8UC1,1);
	int x;
	int n;
	for (int i = -3; i <5; i++)
	{
		for (int j = -3; j <5; j++)
		{
			 x = originImage.at<uchar>(i, j);
			 int y = (x+1);//以下多余代码为了每行的数据输出上下对齐,便于查看
			 for (n= 0; y > 0; n++)
			 {
				 y /= 10;
				 
			 }
			cout <<x;
			for (int i = 1; i < 6 - n; i++)
				cout << " ";
		}
		cout <<endl;
	}

 结果如下:红色标记范围内为原有生成Mat数据图像,其他数据均为越界自动生成数据。。

图2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Coming_is_winter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值