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;
}
運行效果: