OpenCV中 namedWindow()函數的作用

namedWindow()函數用於創建一個窗口。若是簡單的進行圖片顯示,則可以略去namedWindow()函數的調用,即先調用imread讀入圖片,然後用imshow直接指定窗口名稱進行顯示即可。

但當需要在顯示窗口之前就用到窗口名時,比如滑動條的使用,要指定滑動條需要依附的窗口,就需要namedWindow函數先創建出窗口。

namedWindow()函數的作用是通過指定的名字,創建一個可以作爲圖像和進度條的容器窗口。

如果具有相同名稱的窗口已經存在,則函數不做任何事情。我們可以調用destroyWindow()或者destroyAllWindows()函數來關閉窗口,並取消之前分配的與窗口相關的所有內存空間。

但,事實上,對於代碼量不大的簡單程序來說,我們完全沒有必要手動調用上述的destroyWindow()或者destroyAllWindows()函數,因爲在退出時,所有資源和應用程序的窗口會被操作系統自動關閉。

如下代碼展示了一個使用namedWindow創建窗口的例子。

/*
滑動條 是OpenCV動態調節參數特別好用的一種工具,它依附於窗口而存在。

由於OpenCV中並沒有實現按鈕的功能,所以很多時候,我們還可以用僅含0-1的滑動條來是俺按鈕的按下
、彈起效果。
*/
#define _CRT_SECURE_NO_WARNINGS

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace  cv;

#define WINDOW_NAME "線性混合示例"

const int g_nMaxAlphaValue = 100; //Alpha值得最大值
int g_nAlphaValueSlider; //滑動條對應的變量
double g_dAlphaValue;
double g_dBetaValue;

//聲明存儲圖像的變量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;

void on_Trackbar(int, void*)
{
	//求出當前alpha值相對於最大值的比例
	g_dAlphaValue = (double)(g_nAlphaValueSlider / g_nMaxAlphaValue);

	g_dBetaValue = 1.0 - g_dAlphaValue;

	addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);

	imshow(WINDOW_NAME, g_dstImage);

	return;
}

int main(int argc, char** argv)
{
	g_srcImage1 = imread("1.jpg");
	g_srcImage2 = imread("2.jpg");

	if (!g_srcImage1.data)
	{
		printf("read image1 failed.\n");
		return -1;
	}

	if (!g_srcImage2.data)
	{
		printf("read image2 failed.\n");
		return -1;
	}

	//設置滑動條初始值爲70
	g_nAlphaValueSlider = 70;

	//創建窗體
	namedWindow(WINDOW_NAME, 1);

	//在創建的窗體中新建一個滑動條
	char TrackbarName[50];
	sprintf(TrackbarName, "alpha value = %d", g_nMaxAlphaValue);

	createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);

	//結果在回調函數中顯示
	on_Trackbar(g_nAlphaValueSlider, 0);

	waitKey(0);

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章