【问题标题】:Getting screen size on OpenCV在 OpenCV 上获取屏幕大小
【发布时间】:2012-06-14 21:27:43
【问题描述】:

如何在 OpenCV 上获得计算机屏幕分辨率? 我需要使用整个屏幕宽度并排显示两个图像,OpenCV 需要我想要创建的确切窗口大小。

【问题讨论】:

    标签: opencv screen resolution


    【解决方案1】:

    你可以使用这个解决方案跨平台的解决方案有或没有opencv:

    #if WIN32
      #include <windows.h>
    #else
      #include <X11/Xlib.h>
    #endif
    
    //...
    
    void getScreenResolution(int &width, int &height) {
    #if WIN32
        width  = (int) GetSystemMetrics(SM_CXSCREEN);
        height = (int) GetSystemMetrics(SM_CYSCREEN);
    #else
        Display* disp = XOpenDisplay(NULL);
        Screen*  scrn = DefaultScreenOfDisplay(disp);
        width  = scrn->width;
        height = scrn->height;
    #endif
    }
    
    int main() {
        int width, height;
        getScreenResolution(width, height);
        printf("Screen resolution: %dx%d\n", width, height);
    }
    

    【讨论】:

    • 不是opencv解决方案
    • @Tal,你是对的,我在答案的第一行就说过了。
    • 我喜欢 Octo 的答案,因为它可以打开 cv 解决方案并且可以正常工作。
    【解决方案2】:

    在 Linux 中, 试试这个

    #include <stdio.h>
    int main()
    {
     char *command="xrandr | grep '*'";
     FILE *fpipe = (FILE*)popen(command,"r");
     char line[256];
     while ( fgets( line, sizeof(line), fpipe))
     {
      printf("%s", line);
     }
     pclose(fpipe);
     return 0;
    }
    

    在 Windows 中,

    http://cppkid.wordpress.com/2009/01/07/how-to-get-the-screen-resolution-in-pixels/

    【讨论】:

    • 它返回“Xlib: extension "RANDR" missing on display "/tmp/launch-toASus/org.x:0". RandR extension missing",有什么想法吗? :(
    【解决方案3】:

    这不是如何获取屏幕宽度和高度的答案,但它可以让您解决使用全屏尺寸显示两个图像的问题。

    1) 像这样创建一个窗口:

    namedWindow("hello", WINDOW_NORMAL);
    

    这将允许您自己设置窗口大小,您可以轻松设置最大化它,它将占据整个屏幕。下次运行程序时,它还会记住设置。如果需要,您还可以设置标志以保持纵横比。

    2)如果您需要获取确切的像素数,可以使用以下方法获取窗口大小:

    getWindowImageRect("hello");
    

    这样,您可以轻松地将两张图片合二为一,并将结果显示在屏幕上。我自己做。

    【讨论】:

      【解决方案4】:

      使用 opencv 代替 OS 函数:

      cv.namedWindow("dst", cv.WND_PROP_FULLSCREEN)
      cv.setWindowProperty("dst",cv.WND_PROP_FULLSCREEN,cv.WINDOW_FULLSCREEN)
      (a,b,screenWidth,screenHeight) = cv.getWindowImageRect('dst')
      

      所以我在全屏模式下创建一个窗口并询问它的宽度和高度

      它应该适用于任何操作系统,但它只适用于 Windows。在 Linux 下,窗口不是全屏的。

      【讨论】:

        【解决方案5】:

        你不能它是一个操作系统功能 - 这取决于你的操作系统

        【讨论】:

          【解决方案6】:

          在新版本中它也可以像下面这样工作,这很棒:-D

          printf("%f",cap.get(CV_CAP_PROP_FRAME_HEIGHT));
          

          用于设置视频分辨率。

          <capture_handle>.set(property_in_caps, value_in_double);
          
          ex, cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-02-23
            • 1970-01-01
            • 2012-01-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-07
            相关资源
            最近更新 更多