簡體   English   中英

分別顯示多個 OpenCV imshow() 窗口

[英]display multiple OpenCV imshow() windows separately

我有一個使用 opencv 庫構建的 VS 控制台應用程序。 我正在使用 opencv imshow 函數顯示圖像。 問題是所有的 imshow 窗口相互重疊,很難在它們之間切換。 如何防止重疊並分別顯示它們並在它們之間切換

以編程方式執行此操作的方法是調用resizeWindow()來定義每個窗口的大小,並moveWindow()將它們放置在屏幕中的特定位置。

void cv::resizeWindow(const string& winname, int width, int height)
void cv::moveWindow(const string& winname, int x, int y)

雖然這是一個遲到的回復,但您可能會發現在每次imshow()調用后調用moveWindow()很有用。 這里給出了一種獨立於語言的解決方案。

示例步驟:-

  1. 調用imshow("第一張圖片", img1)

  2. call moveWindow("first image", img1, 0, 0) //窗口的默認位置是 col,row == 0,0。 所以,這一行是可選的。

  3. 調用imshow("第二張圖片", img2)
  4. 設置 firstImageWidth = img1 的寬度
  5. set mySpacing = 40 //改變這個以增加/減少圖像窗口之間的間隙。
  6. 調用moveWindow("第一張圖片", img1, firstImageWidth + mySpacing , 0)

然后,添加這些行以防止輸出窗口永遠處於活動狀態。

  1. set myTime = 7000 //以毫秒為單位。 在這里,7000 毫秒 == 7 秒來顯示我們的圖像窗口。
  2. 調用waitKey(myTime)
  3. call waitKey(1) //這是一個技巧。 否則,窗口將無限期打開。

目前,我正在使用 Java SE8 和 OpenCV 4.2。 上面的方法對我有用。 上面示例的屏幕截圖。 這是顯示部分的 Java+OpenCV 代碼片段:

...
//顯示圖像。 使用 OpenCV HighGui 類方法。
String inputWindowName = "此窗口顯示輸入圖像";
String outputWindowName = "此窗口顯示輸出圖像";

HighGui displayWindow = new HighGui();

displayWindow.imshow(inputWindowName, img1);

displayWindow.imshow(outputWindowName, img2);
displayWindow.moveWindow(outputWindowName, img1.cols()+40, 0);

displayWindow.waitKey(7000);
displayWindow.waitKey(1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM