在OpenCV中使用NamedWindow函數可以方便地展示圖像,它提供了各種設置參數來自定義窗口的大小、位置、顏色等屬性。同時,NamedWindow還支持滑鼠響應事件和鍵盤響應事件。在本文中,我們將從以下幾個方面詳細闡述NamedWindow的使用方法。
一、創建並顯示一個窗口
使用NamedWindow函數創建並顯示一個窗口非常簡單,如下所示:
cv::namedWindow("window_name", cv::WINDOW_NORMAL);
cv::imshow("window_name", image);
cv::waitKey(0);
cv::destroyWindow("window_name");
上述代碼中,「window_name」是窗口的名稱,image是需要顯示的圖像。WINDOW_NORMAL參數用於設置窗口的大小和位置可調節,等同於WINDOW_AUTOSIZE參數(大小固定)並且在不同平台下行為較為一致。
該窗口的大小和位置可以通過resizeWindow和moveWindow函數來調整,如下所示:
cv::resizeWindow("window_name", 640, 480);
cv::moveWindow("window_name", 100, 100);
第一個參數是窗口名稱,第二個參數是寬度,第三個參數是高度。moveWindow函數可調整窗口的位置。
二、設置命名窗口的屬性
NamedWindow函數還支持各種屬性設置,如下所示:
cv::namedWindow("window_name", cv::WINDOW_NORMAL);
cv::setWindowProperty("window_name", cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
上述代碼設置了全屏顯示,可使用esc鍵退出全屏。
有關其他屬性,請參見下表。
| 屬性名稱 | 描述 |
|——–|——|
| WINDOW_NORMAL | 可調整大小和位置的窗口 |
| WINDOW_AUTOSIZE | 固定大小的窗口 |
| WINDOW_OPENGL | 支持OpenGL渲染 |
| WINDOW_FULLSCREEN | 全屏顯示窗口 |
| WND_PROP_FULLSCREEN | 窗口是否全屏 |
| WND_PROP_AUTOSIZE | 窗口是否可調整大小 |
| WND_PROP_ASPECT_RATIO | 窗口寬高比 |
| WND_PROP_OPENGL | 窗口是否支持OpenGL渲染 |
| WND_PROP_VISIBLE | 窗口是否可見 |
| WND_PROP_TOPMOST | 窗口是否置頂 |
三、處理滑鼠響應事件
NamedWindow函數還支持滑鼠事件的響應。
void onMouse(int event, int x, int y, int flags, void* userdata)
{
if (event == cv::EVENT_LBUTTONUP)
{
printf("Mouse clicked at (%d,%d)\n", x, y);
}
}
int main()
{
cv::Mat image = cv::imread("image.jpg");
cv::namedWindow("window_name", cv::WINDOW_NORMAL);
cv::setMouseCallback("window_name", onMouse, NULL);
cv::imshow("window_name", image);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
setMouseCallback函數用於設置滑鼠事件響應函數,可以響應左鍵、右鍵、中鍵和滾輪等事件。
四、處理鍵盤響應事件
NamedWindow函數還支持鍵盤事件的響應。
void onKeyPress(int key, void* userdata)
{
printf("The key '%c' (%d) was pressed.\n", key, key);
}
int main()
{
cv::Mat image = cv::imread("image.jpg");
cv::namedWindow("window_name", cv::WINDOW_NORMAL);
cv::setWindowTitle("window_name", "My Window");
cv::setMouseCallback("window_name", onMouse, NULL);
cv::setKeyboardCallback(onKeyPress);
cv::imshow("window_name", image);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
setKeyboardCallback函數用於設置鍵盤事件響應函數,可以響應任意按鍵。
五、總結
在本文中,我們詳細介紹了如何使用OpenCV中的NamedWindow函數展示圖像,並對其進行自定義設置,同時使用滑鼠和鍵盤響應事件,使展示圖像的交互性更強。希望大家能夠掌握NamedWindow的使用方法,在實際項目中充分發揮它的優勢。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293649.html