栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【图像处理学习笔记opencv】膨胀与腐蚀

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【图像处理学习笔记opencv】膨胀与腐蚀

文章目录
  • 一、膨胀与腐蚀原理
  • 二、代码实现
    • 1.操作像素实现
    • 2.Opencv库函数实现:dilate(膨胀)、erode(腐蚀)、getStructuringElement(锚框的形状)


一、膨胀与腐蚀原理

膨胀:锚点邻域最大像素值代替锚点处像素值。
腐蚀:锚点邻域最小像素值代替锚点处像素值。
如图为矩形(3*3)框,还可以为圆形框、椭圆框等。

二、代码实现 1.操作像素实现

腐蚀(矩形)代码如下(示例):

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include 
#include
using namespace cv;
using namespace std;

	


int main(int argc, char* argv)
{
    Mat src = imread("1000.jpg",IMREAD_GRAYSCALE);

	if (!src.data)
	{
		cout << "图像为空" << endl;
		return -1;
	}
	Mat src_border;

	copyMakeBorder(src, src_border,2,2,2,2,CV_8U,Scalar(0));

	uchar min,max;
	for (int i = 2; i < src.rows+2; i++)
	{
		for (int j = 2; j < src.cols+2; j++)
		{
			uchar vec[9] = { src_border.at(i, j), src_border.at(i - 1, j),src_border.at(i + 1, j),
				             src_border.at(i, j - 1),src_border.at(i, j + 1) ,src_border.at(i - 1, j - 1) ,
				             src_border.at(i + 1, j + 1) ,src_border.at(i + 1, j - 1) ,src_border.at(i - 1, j + 1) };
			min = 255, max = 0;
			for (int c = 0; c < 9; c++)
			{
				if (vec[c]>=max)
					max = vec[c];

				if (vec[c](i-2, j-2) = min;
		}
	}

	imshow("board", src);
	waitKey();
}

膨胀代码(矩形)如下(示例):

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include 
#include
using namespace cv;
using namespace std;

	


int main(int argc, char* argv)
{
    Mat src = imread("1000.jpg",IMREAD_GRAYSCALE);

	if (!src.data)
	{
		cout << "图像为空" << endl;
		return -1;
	}
	Mat src_border;

	copyMakeBorder(src, src_border,2,2,2,2,CV_8U,Scalar(0));

	uchar min,max;
	for (int i = 2; i < src.rows+2; i++)
	{
		for (int j = 2; j < src.cols+2; j++)
		{
			uchar vec[9] = { src_border.at(i, j), src_border.at(i - 1, j),src_border.at(i + 1, j),
				             src_border.at(i, j - 1),src_border.at(i, j + 1) ,src_border.at(i - 1, j - 1) ,
				             src_border.at(i + 1, j + 1) ,src_border.at(i + 1, j - 1) ,src_border.at(i - 1, j + 1) };
			min = 255, max = 0;
			for (int c = 0; c < 9; c++)
			{
				if (vec[c]>=max)
					max = vec[c];

				if (vec[c](i-2, j-2) = max;
		}
	}

	imshow("board", src);
	waitKey();
}
2.Opencv库函数实现:dilate(膨胀)、erode(腐蚀)、getStructuringElement(锚框的形状)


代码如下(示例):

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include 
#include
using namespace cv;
using namespace std;

	


int main(int argc, char* argv)
{
    Mat src = imread("1000.jpg",IMREAD_GRAYSCALE);

	if (!src.data)
	{
		cout << "图像为空" << endl;
		return -1;
	}
	Mat src_dilate, src_erode;
	Mat kenel = getStructuringElement(MORPH_RECT,Size(3,3));
	dilate(src, src_dilate, kenel);
	erode(src, src_erode, kenel);

	imshow("src_dilate", src_dilate);
	imshow("src_erode", src_erode);
	waitKey();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980384.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号