【问题标题】:Why window name changes window size on creation?为什么窗口名称会在创建时更改窗口大小?
【发布时间】:2021-01-07 11:54:14
【问题描述】:

我使用 OpenCV 库创建了一个窗口,在其中显示来自文件夹的图像。 (通过点击空格键更改图像)。

在窗口名称中,我想显示已经显示的图像的数量,例如“20 张图片中的 10 张”。

出现问题,当我单击空格键并显示带有另一个图像的新窗口时,窗口的大小会改变(有时窗口会移动到屏幕上的另一个位置)。我怎样才能使窗户的大小稳定?我希望每次显示新图像时创建的所有窗口都具有相同的大小和位置。

下面我使用的代码:

fullWindowName = SmString(windowName) << " " << i <<  " Out of " << filePaths.size();
cv::namedWindow(cv::String(fullWindowName), WINDOW_NORMAL | WINDOW_KEEPRATIO);
cv::imshow(cv::String(fullWindowName), srcDisp);
cv::setMouseCallback(cv::String(fullWindowName), on_Mouse, &srcDisp);

【问题讨论】:

    标签: c++ opencv window


    【解决方案1】:

    您只需要resizeWindowmoveWindow 即可实现这一目标。

    这里有一些示例代码:

    #include <opencv.hpp>
    
    int main()
    {
        std::vector<cv::Mat> images;
        /* Feed some images here ... */
    
        int width = 640;
        int height = 480;
        int x = 100;
        int y = 100;
        for (int i = 0; i < images.size(); i++) {
            cv::destroyAllWindows();
            std::stringstream ss;
            ss << i + 1 << " out of " << images.size() << " images";
            std::string windowName = ss.str();
            cv::namedWindow(windowName, cv::WINDOW_NORMAL | cv::WINDOW_KEEPRATIO);
            cv::resizeWindow(windowName, width, height);
            cv::moveWindow(windowName, x, y);
            cv::imshow(windowName, images[i]);
            cv::waitKey(0);
        }
    
        return 0;
    }
    

    cv::WINDOW_KEEPRATIO 对我不起作用,可能是由于缺少 Qt 后端,参见。文档:

    Qt 后端支持额外的标志:

    WINDOW_NORMAL 或 WINDOW_AUTOSIZE:WINDOW_NORMAL 允许您调整窗口大小,而 WINDOW_AUTOSIZE 自动调整窗口大小以适应显示的图像(请参阅 imshow ),您不能手动更改窗口大小。

    WINDOW_FREERATIO 或 WINDOW_KEEPRATIO:WINDOW_FREERATIO 调整图像而不考虑其比例,而 WINDOW_KEEPRATIO 保持图像比例。

    WINDOW_GUI_NORMAL 或 WINDOW_GUI_EXPANDED:WINDOW_GUI_NORMAL 是绘制没有状态栏和工具栏的窗口的旧方法,而 WINDOW_GUI_EXPANDED 是一种新的增强型 GUI。默认情况下,标志 == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED

    除此之外,所有显示图像的窗口大小和位置都是恒定的。

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 1970-01-01
      • 2022-07-08
      • 2011-06-17
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多