簡單的水漫填充算法的各參數效果展示,用滑動條鍵盤控制

在這裏插入圖片描述

#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,dst;
int gn_low=20, gn_up=20;
int fillmod = 1;//控制是否爲固定和浮動。
int num = 1;//控制4位或者8位。
int g_newmask = 255;
int g_niegbor = 4;

static void on_mouse(int event, int x, int y,int, void*); //注意參數個數。

//簡單的水漫填充算法的各參數效果展示,用滑動條於數字鍵盤控制。
//int floodFill(src,seed,newvalue,rect,lowscalar,upscalar,flag(4,8|0-255佔8-16位,floodfillde_fixed_range和floodfilled_mask_only))
int main()
{
	//1.讀取原圖。
	src = imread("濾波圖.jpg",1);
	resize(src,src,Size(),0.4,0.4);
	//imshow("window",src);
	//2.拷貝圖像到結果圖。
	src.copyTo(dst);
	//3.創建兩個滑動條,控制lowscalar和upscalar.
	namedWindow(window1);
	createTrackbar("負最大值",window1,&gn_low,255,0);
	createTrackbar("正最大值",window1,&gn_up,255,0);
	
	
	//4.創建鼠標回調函數,控制seed點,這個點從鼠標所在取出。
	setMouseCallback(window1,on_mouse,0);


	//5.用while(1)函數來控制退出或者處理,以及按鍵的轉換,循環體中用waitkey暫停,取按鍵。
	//6.如果按鍵是esc==27,那麼就退出,如果是1,那麼模式進行固定和浮動變換。4位和8位。
	
	while (1)
	{
		char c;
		imshow(window1,dst);
		c = waitKey(0);
		if (c  == 27)
		{
			cout << "程序退出!!";
			break;
		}

		switch ((char)c)
		{
		case '1':
			if (g_niegbor == 4)
			{
				g_niegbor = 8;
			}
			else
				g_niegbor = 4;
			break;
		case '2':
			if (fillmod == 1)
			{
				fillmod = 0;
			}
			else
				fillmod = 1;
			break;

		}

	}




	
	return 0;


}

//4.on_mouse函數。
static void on_mouse(int event, int x, int y,int ,void*)//注意參數個數。
{
	//1.判斷鼠標動作
	if (event != EVENT_LBUTTONDOWN)
		return;
	//2.準備參數
	Point seed = Point(x,y);
	
	int flag = g_niegbor + (g_newmask << 8) + (fillmod==1?FLOODFILL_FIXED_RANGE:0);

	//3.準備隨機顏色。隨機函數生成器,theRNG();
	int r = (unsigned)theRNG() & 255;
	int g = (unsigned)theRNG() & 255;
	int b = (unsigned)theRNG() & 255;
	
	Scalar rgb = Scalar(b,g,r);

	Rect rect;
	//4.開始調用floodfilled函數。
	floodFill(dst,seed,rgb,&rect,Scalar(gn_low,gn_low,gn_low),Scalar(gn_up, gn_up,gn_up),flag);
	//5.顯示結果。
	imshow(window1,dst);

}

甚至各種模式都可以用滑動條控制,這樣更加直觀。

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