【拜小白opencv】23-双阈值化操作

常言道“温故而知新”,写此文章就是对自己目前学习内容的小小的总结与记录。

本文力求用最简洁的语言,详细的代码将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有些瑕疵,还望读者能够指教探讨,大家共同进步。

博主机器配置为:VS2013+opencv2.4.13+Win-64bit。

若本文能给读者带来一点点启示与帮助,我就很开心了。

===========================分割线========================


对于一些图像有很强的分界特征,我们可以考虑用双阈值法进行二值化操作。

双阈值化思想

  1. 首先要确定的是该方法同样也是对灰度图进行操作。
  2. 然后,我们预设两个特定的阈值量thresh1、thresh2,并且thresh1 < thresh2 。
  3. 阈值化的过程就是,将在 (thresh1,thresh2) 这个区间内的灰度值设置为maxVal,将其余部分设置为0 。

双阈值化操作中的两个预设阈值量根据实际需要自行设置,需要说明的是,maxVal可以是某一个固定值(通常情况下8位无符号图像设置为最大灰度值255)。

双阈值化类型如下式所示:

【拜小白opencv】23-双阈值化操作_第1张图片


=====================分割线==================

代码演示

/*
	双阈值化操作
*/

#include               
#include               
#include              
#include             
using namespace std;
using namespace cv;

int main()
{
	//------------【1】读取源图像并检查图像是否读取成功------------    
	Mat srcImage = imread("D:\\OutPutResult\\ImageTest\\build.jpg");
	if (!srcImage.data)
	{
		cout << "读取图片错误,请重新输入正确路径!\n";
		system("pause");
		return -1;
	}
	imshow("【源图像】", srcImage);
	//------------【2】灰度转换--------------------------   
	Mat srcGray;
	cvtColor(srcImage, srcGray, CV_RGB2GRAY);
	imshow("【灰度图】", srcGray);
	//------------【3】初始化相关变量--------------------
	Mat dstTempImage1, dstTempImage2, dstImage;
	const int maxVal = 255;		//预设最大值
	int low_threshold = 90;		//较小的阈值量
	int high_threshold = 190;	//较大的阈值量
	//--------------【4】双阈值化过程-----------------------
	//小阈值对源灰度图像进行二进制阈值化操作
	threshold(srcGray, dstTempImage1, low_threshold, maxVal, THRESH_BINARY);
	//大阈值对源灰度图像进行反二进制阈值化操作
	threshold(srcGray, dstTempImage2, high_threshold, maxVal, THRESH_BINARY_INV);
	//矩阵"与运算"得到二值化结果
	bitwise_and(dstTempImage1, dstTempImage2, dstImage); //对像素加和
	imshow("【双阈值化】", dstImage);
	waitKey(0);	//窗口保持等待
	return 0;
}

=====================分割线======================

显示结果

【拜小白opencv】23-双阈值化操作_第2张图片
====================分割线====================

程序说明

程序中主要还是用到了threshold()函数,不知道该函数怎么用到,请翻前几节内容。
对较小的阈值量进行二进制阈值化,而对较大的阈值量进行反二进制化操作,最后将所得的两幅图像进行与运算,得到最终效果。

关于 bitwise_and()  函数的使用方法请参考:  

opencv中的bitwise_not,bitwise_xor,bitwise_or,bitwise_and的使用方法与效果


=======================END=======================


你可能感兴趣的:(【拜小白OpenCV】,一步步学习OpenCV2,visual,studio,64bit,opencv+vs,双阈值化)