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;
}