閾值函數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);


	



}

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

發佈了138 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章