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