不规则Contours内部像素的操作

本文详细介绍了如何在图像处理中使用findContours函数查找边界并填充内部区域,进而通过与源图像进行AND运算筛选出特定目标。具体步骤包括求取每个轮廓的包络矩形,并遍历矩形内像素,排除背景点,最终实现非规则区域特征的高效计算。

在findContours函数使用了之后,有时候就会面临对Contours内部区域的访问。由于contours不一定是凸图形,所以使用循环操作的时候总感觉不那么方便。比如在下图中,已经使用findContours查找到边界并填充边界内部,然后与源图像进行and运算后的结果:


这时候要对非规则点的区域进行相关特征的计算,比如说是区域的灰度均值。观察图像的特征可以发现除了我们需要的点外,其他的都是黑色的背景(灰度值是0!)。那么就可以使用这个特点来除去背景点了。

步骤:

1、对每一个contours区域求它的包络矩形(为了方便遍历像素,就不使用旋转矩形)

  

	Mat drawing = Mat::zeros(m_SrcImg.size(), CV_8UC3 );
	for( int i = 0; i< m_contour->size(); i++ )
	{
		m_rect = boundingRect(m_contour->at(i));
		for (int nX=m_rect.x; nX<(m_rect.x+m_rect.width); ++nX)
		{
			for (int nY=m_rect.y; nY<(m_rect.y+m_rect.height); ++nY)
			{
				if (m_SrcImg.at<uchar>(nY,nX) == 0)
					continue;
				drawing.at<cv::Vec3b>(nY,nX)[0] = 0;
				drawing.at<cv::Vec3b>(nY,nX)[1] = 0;
				drawing.at<cv::Vec3b>(nY,nX)[2] = 255;
			}
		}
	}

<span style="font-family: 'Times New Roman'; font-size: 18px; background-color: rgb(255, 255, 255);">2、对矩形内的每一个像素点进行遍历,对矩形区域的像素遍历显然变得比较方便了。</span>

为了验证矩形区域的有效性,把矩形区域都用颜色标注出来

然后在像素遍历函数中来排除背景像素点就可以了,最后得到的效果如下,这就说明这种方式是可以实现的。






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空空的司马

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

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

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

打赏作者

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

抵扣说明:

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

余额充值