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;
}

運行效果:

在這裏插入圖片描述

發佈了14 篇原創文章 · 獲贊 19 · 訪問量 3917
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章