OpenCV学习笔记(16)图像的二值化

      图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。与边缘检测相比,轮廓检测有时能更好的反映图像的内容,而要对图像进行轮廓检测,则必须要先对图像进行二值化,在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。

      threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。

其函数原型如下:

double threshold (InputArray src, OutputArray dst, double thresh, double maxval, int type)  

参数信息:
第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可。
第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型。
第三个参数,double类型的thresh,阈值的具体值。
第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值.
第五个参数,int类型的type,阈值类型,。
其它参数很好理解,我们来看看第五个参数,第五参数有以下几种类型
0: THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0
1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
4: THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变
官方解释如下图:



示例程序:


#include   
#include  
#include"opencv2/imgproc/imgproc.hpp"  
#include   

using namespace cv;
Mat SrcImage;
Mat GrayImage;
Mat BinaryImage;

void on_trackbar(int pos,void*)
{
	//转化为二值图
	threshold(GrayImage, BinaryImage, pos, 255, CV_THRESH_BINARY);
	namedWindow("二值图");
	imshow("二值图", BinaryImage);
}

void to_GrayImage()
{
	//创建与原图同类型和同大小的矩阵
	GrayImage.create(SrcImage.size(), SrcImage.type());
	//将原图转换为灰度图像
	cvtColor(SrcImage, GrayImage, CV_BGR2GRAY);

	namedWindow("灰度图");
	imshow("灰度图", GrayImage);
	
}


void creat_trackbar()
{
	int nThreshold = 0;
	createTrackbar("二值图阈值", "二值图", &nThreshold, 254, on_trackbar);

}

int main()
{
	SrcImage = imread("102.jpg");
	namedWindow("原图");
	imshow("原图", SrcImage);
	to_GrayImage();
	on_trackbar(1, 0);
	creat_trackbar();
	waitKey();
}



你可能感兴趣的:(OpenCV)