使用OpenCV中的NamedWindow展示圖像

在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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:14

相關推薦

  • 如何在PyCharm中安裝OpenCV?

    本文將從以下幾個方面詳細介紹如何在PyCharm中安裝OpenCV。 一、安裝Python 在安裝OpenCV之前,請確保已經安裝了Python。 如果您還沒有安裝Python,可…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python OpenCV 直線檢測

    本文將介紹在Python OpenCV中進行直線檢測的方法,主要涉及到圖像的邊緣檢測、霍夫變換和繪製直線等操作。 一、邊緣檢測 由於直線檢測是從圖像的邊緣開始的,因此必須先找到圖像…

    編程 2025-04-29
  • 如何實現圖像粘貼到蒙版

    本文將從多個方面介紹圖像粘貼到蒙版的實現方法。 一、創建蒙版 首先,在HTML中創建一個蒙版元素,用於接收要粘貼的圖片。 <div id=”mask” style=”widt…

    編程 2025-04-29
  • Python圖像黑白反轉用法介紹

    本文將從多個方面詳細闡述Python圖像黑白反轉的方法和技巧。 一、Pillow模塊介紹 Pillow是Python的一個圖像處理模塊,可以進行圖片的裁剪、旋轉、縮放等操作。使用P…

    編程 2025-04-28
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • Python實現圖像轉化為灰度圖像

    本文將從多個方面詳細闡述如何使用Python將圖像轉化為灰度圖像,包括圖像的概念、灰度圖像的概念、Python庫的使用以及完整的Python代碼實現。 一、圖像與灰度圖像 圖像是指…

    編程 2025-04-28
  • 圖像與信號處理期刊級別

    本文將從多個方面介紹圖像與信號處理期刊級別的相關知識,包括圖像壓縮、人臉識別、關鍵點匹配等等。 一、圖像壓縮 圖像在傳輸和存儲中佔據了大量的空間,因此圖像壓縮成為了很重要的技術。常…

    編程 2025-04-28
  • Opencv 實現讀取 BMP 圖片

    Opencv 是一個基於 C/C++ 語言的開源計算機視覺庫,可以用於圖像處理、特徵識別、目標跟蹤、機器學習等領域。在圖像處理中,讀取 BMP 圖片是常見操作之一。 一、打開 BM…

    編程 2025-04-27
  • opencv滑鼠繪圖

    本文將為您詳細介紹如何使用opencv在原始圖片上進行滑鼠繪圖。 一、準備工作 在開始繪製之前,您需要先準備好以下的工作: 1、安裝opencv庫,可以通過pip install …

    編程 2025-04-27

發表回復

登錄後才能評論