阈值分割方法总结「建议收藏」

阈值分割方法总结「建议收藏」阈值是界限的意思,阈值分割就是以一个合适的像素值作为界限将图像处理成高对比度、容易识别的图像的一种方法。threshold()doublecv::threshold(cv::InputArraysrc,//输入图像cv::OutputArraydst,//输出图像doublethresh,//阈值doublemaxValue,//…

大家好,欢迎来到IT知识分享网。

阈值是界限的意思,阈值分割就是以一个合适的像素值作为界限将图像处理成高对比度、容易识别的图像的一种方法。
threshold()

double cv::threshold(
    cv::InputArray src, // 输入图像
    cv::OutputArray dst, // 输出图像
    double thresh, // 阈值
    double maxValue, // 向上最大值
    int thresholdType // 阈值化操作的类型 
)

在这里插入图片描述
举个例子理解下thresholdType,拿第一种方法为例。像素值如果大于阈值,则把像素值变成255,否则,变成0.这样以来,就把原图变成黑白两色,对比度明显。

threshold(image, t_image,120, 255,CV_THRESH_BINARY); 

自适应阈值分割

void cv::adaptiveThreshold(  
    cv::InputArray src, // 输入图像  
    cv::OutputArray dst, // 输出图像  
    double maxValue, // 向上最大值  
    int adaptiveMethod, // 自适应方法,平均或高斯  
    int thresholdType // 阈值化类型  
    int blockSize, // 块大小  
    double C // 常量  
); 

adaptiveThreshold()支持两种自适应方法,cv::ADAPTIVE_THRESH_MEAN_C(平均)和cv::ADAPTIVE_THRESH_GAUSSIAN_C(高斯)。

 adaptiveThreshold(image, src, 255, ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,5,20);

自适应阈值不用自己选择,该函数根据图像情况自己设定。
在这里插入图片描述
该图是经canny检测之后的阈值分割图。

阈值分割还有一种方法,直接说明:

Mat image = imread("D:\\program\\bu1.png",0);//读入模板图
	imshow("原图",image);
	waitKey(0);
	Mat dstImg(image.size(), CV_8UC3, Scalar::all(0));//纯黑图像

    int u1 = image.rows;//阈值化处理
	int u2 = image.cols;
	for (int i = 0; i < image.rows; i++)
	{
		for (int j = 0; j < image.cols; j++)
		{
			
	        sum = sum + image.at<uchar>(i, j);
		}
	}
	int u = u1*u2;
	int average = (int)sum/u*2;
	threshold(image, t_image, average, 255,CV_THRESH_BINARY); 
	Canny(src,t_image,50,50);  
	imshow("阈值分割图",t_image);
	waitKey(0);

该方法简单明了,阈值取值适中,不错。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24734.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信