阈值函数threshold和adaptivethreshold不同模式和类型的对比

#include<iostream>
#include<opencv2/opencv.hpp>
#define window1 "【结果1】"
#define window  "【原图 】"
#define window2 "【结果2】"
#define window3 "【结果3】"
#define window4 "【结果4】"
#define window5 "【结果5】"

using namespace std;
using namespace cv;


Mat src,dst1,dst2;
//2.
int g1_thresh = 110;
int g1_mod = 0;
int g1_threshmethod = THRESH_BINARY;


int g2_modofthresh = 0;
int g2_modofmethod = 1;
int g2_gaossin_or_mean = ADAPTIVE_THRESH_GAUSSIAN_C;
int g2_neibor = 2;

int g2_threshmethod = THRESH_BINARY;

//4 回调函数
void on_thresh(int,void*);
void on_autothresh(int,void*);

//两个窗口
//窗口1:threshold函数。
//滑动条1 来控制阈值大小,从0-255,初始值取中间值。
//滑动条2 来控制阈值模式,0 binary,1,binary_inv,2.trunc.3.zero 4.zero_inv

//窗口2:adeptivethreshold函数。
//滑动条1:模式:1,binary,2.binary—inv
//滑动条2:方法:1.高斯模式,几何平均值模式。
//滑动条3:邻域尺寸。奇数。
int main()
{
	//1.读取原图。
	src;
	src = imread("游乐园.jpg",0);
	resize(src,src,Size(),0.8,0.8);
	imshow(window,src);
	//2.创建集中阈值控制模式的判别变量。全局变量。
	//3.创建两个窗口。
	namedWindow(window1,WINDOW_AUTOSIZE);
	namedWindow(window2,WINDOW_AUTOSIZE);
	imshow(window1,src);
	imshow(window2,src);
	//4.回调函数以及滑动条。
	createTrackbar("阈值",window1,&g1_thresh,255,on_thresh);
	createTrackbar("模式",window1,&g1_mod,3,on_thresh);

	createTrackbar("模式",window2,&g2_modofthresh,1,on_autothresh);
	createTrackbar("均值方法",window2,&g2_modofmethod,1,on_autothresh);
	createTrackbar("邻域大小",window2,&g2_neibor,10,on_autothresh);
	
	while (1)
	{
		

		int c=waitKey(1);
		if (c == 27)
		{
			return 0;
			break;
		}
		if (c == 'q')
			{
				return 0;
				break;
			}
		

	}



	waitKey(0);
	return 0;


}


void on_thresh(int, void*)
{
	//1.根据各个控制条件来判断参数
	switch (g1_mod)
	{
	case 0:
		g1_threshmethod = THRESH_BINARY;
		break;
	case 1:
		g1_threshmethod = THRESH_BINARY_INV;
		break;
	case 2:
		g1_threshmethod = THRESH_TRUNC;
		break;
	case 3:
		g1_threshmethod = THRESH_TOZERO;
		break;
    case 4:
		g1_threshmethod = THRESH_TOZERO_INV;
		break;
	}
		
	//2.然后进行阈值取值。
	threshold(src,dst1,g1_thresh,255,g1_threshmethod);
	imshow(window1,dst1);


}


void on_autothresh(int, void*)
{
	//1.根据各控制滑动条来确定参数。
	if (g2_modofthresh == 0) //0为binary,1为ivy
		g2_threshmethod = THRESH_BINARY;
	else
		g2_threshmethod = THRESH_BINARY_INV;

	if (g2_modofmethod == 1)//0为普通均值,1位高斯均值。
		g2_gaossin_or_mean = ADAPTIVE_THRESH_GAUSSIAN_C;
	else
		g2_gaossin_or_mean = ADAPTIVE_THRESH_MEAN_C;

	int g2_box = 2 * g2_neibor + 1;
	
	
	//2.开始调用函数。
	if (g2_box >= 3)
		adaptiveThreshold(src, dst2, 255, g2_gaossin_or_mean, g2_threshmethod, g2_box, 5);
	else
		return;

	imshow(window2,dst2);


	



}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值