OpenCV学习笔记(3)-阈值分割、平滑处理、形态学处理

OpenCV学习笔记(3)

1.阈值分割
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	char *filename = "C:/Users/Administrator/Desktop/picture/1.jpg";
	Mat Image = imread(filename, IMREAD_UNCHANGED);                //从文件中读取图片
	imshow("Image", Image);
	if (Image.data == NULL)
	{
		cout << "未读入图片数据" << endl;
	}
	else
	{
		//将彩图转化为灰度图片
		Mat ImageGray;
		cvtColor(Image, ImageGray, COLOR_BGR2GRAY);
		imshow("ImageGray", ImageGray);
		Mat Image_Binary,         //二进制阈值化 
			Image_Binary_Inv,     //反二进制阈值化
			Image_Trunc,          //截断阈值化
			Image_To_Zero,        //置0阈值操作
			Image_To_Zero_Inv;    //反阈值化为0
		//二进制阈值化
		threshold(ImageGray,Image_Binary,127,255,THRESH_BINARY);
		imshow("Image_Binary", Image_Binary);
		//反二进制阈值化
		threshold(ImageGray, Image_Binary_Inv, 127, 255, THRESH_BINARY_INV);
		imshow("Image_Binary_Inv", Image_Binary_Inv);
		//截断阈值化
		threshold(ImageGray, Image_Trunc, 127, 255, THRESH_TRUNC);
		imshow("Image_Trunc", Image_Trunc);
		//阈值化为0
		threshold(ImageGray, Image_To_Zero, 127, 255, THRESH_TOZERO);
		imshow("Image_To_Zero", Image_To_Zero);
		//反阈值化为0
		threshold(ImageGray, Image_To_Zero_Inv, 127, 255, THRESH_TOZERO_INV);
		imshow("Image_To_Zero_Inv", Image_To_Zero_Inv);
	}
	waitKey();
	return 0;
}

运行效果:
在这里插入图片描述

2.图像的平滑处理
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	char *filename = "C:/Users/Administrator/Desktop/picture/1.jpg";
	Mat Image = imread(filename, IMREAD_UNCHANGED);                //从文件中读取图片
	imshow("Image", Image);
	if (Image.data == NULL)
	{
		cout << "未读入图片数据" << endl;
	}
	else
	{
		Size x;
		x.height = 3, x.width = 3;
		Mat Image_Blur,         //均值滤波
			Image_Box_Filter,   //方框滤波
			Image_GaussianBlur, //高斯滤波
			Image_Medianblur;   //中值滤波
		//均值滤波
		blur(Image, Image_Blur, x);
		imshow("Image_Blur", Image_Blur);
		//方框滤波
		boxFilter(Image, Image_Box_Filter,-1,x);
		imshow("Image_Box_Filter", Image_Box_Filter);
		//高斯滤波
		GaussianBlur(Image, Image_GaussianBlur,x,0,0);
		imshow("Image_GaussianBlur", Image_GaussianBlur);
		//中值滤波
		medianBlur(Image, Image_Medianblur,3);
		imshow("Image_Medianblur", Image_Medianblur);
	}
	waitKey();
	return 0;
}

运行效果:
在这里插入图片描述

3.形态学处理

1.图像腐蚀:被扫描的原始图像中的像素点,只有当卷积核对应的元素值均为1,其值就为1,否则为0。
2.图像膨胀:被扫描到原始图像中的像素点,当卷积核对应的元素值只要有一个为1是,其值就为1,否则为0。
3.开运算:图像腐蚀后,除了噪声,但是会压缩图像,对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原有形状。
工作原理:先对图像进行腐蚀,随后对图像进行膨胀。
作用:有助于去除图像的外部噪声信息。
4.闭运算工作原理:先对图像进行膨胀,随后对图形进行压缩。作用:有助于去除图像的内部噪声信息。
5.顶帽(礼帽)图像工作原理:顶帽运算=原始图像-开运算图像;作用:得到图像的外部噪声信息。
6.黑帽图像工作原理: 黑帽运算=闭运算图像-原始图像;作用:得到图像的内部噪声信息。

//图像的腐蚀、膨胀、开运算、顶帽运算
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	char *filename = "C:/Users/Administrator/Desktop/picture/J.png";
	Mat Image = imread(filename, IMREAD_UNCHANGED);                //从文件中读取图片
	if (Image.data == NULL)
	{
		cout << "未读入图片数据" << endl;
	}
	else
	{
		imshow("Image", Image);
		//对图像进行腐蚀操作
		Mat Corrosion_Image;
		Mat element = getStructuringElement(MORPH_RECT, Size(15,15));
		erode(Image, Corrosion_Image, element);
		imshow("Corrosion_Image", Corrosion_Image);
	
		//对图像进行膨胀操作
		Mat Expand_Image;
		dilate(Corrosion_Image, Expand_Image, element);
		imshow("Expand_Image", Expand_Image);
        
		//对图像进行开运算
		Mat Open_Image;
		morphologyEx(Image, Open_Image,MORPH_OPEN ,element);
		imshow("Open_Image", Open_Image);
		
		//对图像实现顶帽运算
		Mat TopHat_Image;
		morphologyEx(Image, TopHat_Image, MORPH_TOPHAT, element);
		imshow("TopHat_Image", TopHat_Image);
	}
	waitKey();
	return 0;
}

运行效果:
在这里插入图片描述

//图像的膨胀、腐蚀、闭运算、黑帽运算
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	char *filename = "C:/Users/Administrator/Desktop/picture/J1.png";
	Mat Image = imread(filename, IMREAD_UNCHANGED);                //从文件中读取图片
	if (Image.data == NULL)
	{
		cout << "未读入图片数据" << endl;
	}
	else
	{
		imshow("Image", Image);
	
		//对图像进行膨胀操作
		Mat Expand_Image;
		Mat element = getStructuringElement(MORPH_RECT, Size(7,7));
		dilate(Image, Expand_Image, element);
		imshow("Expand_Image", Expand_Image);
		
		//对图像进行腐蚀操作
		Mat Corrosion_Image;
		erode(Expand_Image, Corrosion_Image, element);
		imshow("Corrosion_Image", Corrosion_Image);
        
		//对图像进行闭运算
		Mat Close_Image;
		morphologyEx(Image, Close_Image, MORPH_CLOSE,element);
		imshow("Close_Image", Close_Image);
		
		//对图像实现黑帽运算
		Mat Blackhat_Image;
		morphologyEx(Image, Blackhat_Image, MORPH_BLACKHAT, element);
		imshow("Blackhat_Image", Blackhat_Image);
	}
	waitKey();
	return 0;
}

运行效果:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值