获取OpenCV中的屏幕尺寸

16

如何在OpenCV中获取计算机屏幕分辨率? 我需要使用整个屏幕宽度并排显示两张图片,但OpenCV需要精确的窗口尺寸。

6个回答

8

您可以使用此跨平台解决方案,无论是否使用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);
}

1
这不是OpenCV的解决方案。 - Tal
2
@Tal,你是对的,而且我在答案的第一行就已经说了。 - Derzu
我喜欢Octo的答案,因为它提供了开放的CV解决方案并且它有效。 - Tal

5

使用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')

我创建了一个全屏窗口并请求其宽度和高度。

这应该适用于任何操作系统,但在Linux下,窗口不是全屏状态。


5
在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中,

这个链接介绍了如何获取屏幕分辨率的像素值。


它返回“Xlib:在显示器“/ tmp / launch-toASus / org.x:0”上缺少扩展名“RANDR”。 缺少RandR扩展名”,有什么想法? :( - Lucas C. Feijo

2
这不是关于如何获取屏幕宽度和高度的答案,但它可以帮助您解决使用全屏大小显示两个图像的问题。
1)创建一个如下所示的窗口:
namedWindow("hello", WINDOW_NORMAL);

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

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


getWindowImageRect("hello");

这样,您可以轻松地将两个图像合并成一个,并在屏幕上显示结果。我自己正在这样做。

原始答案:最初的回答。


0

你无法做到这一点,因为它是一个操作系统功能 - 它取决于你的操作系统。


-2
在新版本中,它也像下面这样工作,这太棒了 :-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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接