在OpenCV中获取窗口大小

13
我在网上搜索了一下,没有找到答案,所以想来这里问问专家。有没有一种方式可以在OpenCV中获取当前窗口的分辨率?我尝试了使用cvGetWindowProperty传入窗口的实例名称,但是我找不到要使用的标志。
非常感谢任何帮助。

您可以设置OpenCV窗口的大小,那么请问为什么需要获取其大小?这意味着如果您已经创建或调整了它,那么您应该已经知道它的大小了。 - aardvarkk
3
我正在后台运行一些算法,这些算法依赖于屏幕分辨率。无论视频还是网络摄像头的输入,我都需要大小信息。我可以始终将大小硬编码,并在此基础上工作,但如果我即时加载不同的视频或者接收不同分辨率的网络摄像头,我希望能够自动获取信息而不是为每个输入设置固定的大小。 - Seb
1
例如,为了在窗口销毁后保留窗口几何形状以供下一次算法迭代使用(用户可能会更改窗口大小),可以使用 @aardvarkk。 - avtomaton
答案在https://dev59.com/9mgu5IYBdhLWcg3w2KXM中得到:在Win32 / not上使用宏,然后GetSystemMetrics或XOpenDisplay + DefaultScreenOfDisplay。 - WillC
2个回答

5

您可以使用 shape[1]shape[0] 来获取窗口内容的宽度高度。我认为当您使用 Open CV 时,从相机获得的图像将被存储为 Numpy 数组,其形状为 [rows, cols, bgr_channels],例如 [480,640,3]。

示例代码:

import cv2 as cv2

cv2.namedWindow("myWindow")

cap = cv2.VideoCapture(0) #open camera
ret,frame = cap.read() #start streaming

windowWidth=frame.shape[1]
windowHeight=frame.shape[0]
print(windowWidth)
print(windowHeight)

cv2.waitKey(0) #wait for a key
cap.release() # Destroys the capture object
cv2.destroyAllWindows() # Destroys all the windows


console output:
640
480

你还可以调用 getWindowImageRect(),该函数获取一个完整的矩形:x、y、w、h。

例如:
import cv2 as cv2

cv2.namedWindow("myWindow")

cap = cv2.VideoCapture(0) #open camera
ret,frame = cap.read() #start streaming

windowWidth=cv2.getWindowImageRect("myWindow")[2]
windowHeight=cv2.getWindowImageRect("myWindow")[3]

print(windowWidth)
print(windowHeight)

cv2.waitKey(0) #wait for a key
cap.release() # Destroys the capture object
cv2.destroyAllWindows() # Destroys all the windows

-which very curiously printed 800 500 (the actual widescreen format from the camera)

2

嗯...这并不是一个很好的答案(相当的hack!),但是你可以调用cvGetWindowHandle。通过该本地窗口句柄,我相信你可以找到一些本地调用来获取包含图像的大小。这种方法丑陋、hackish,并且不太可移植,但这是我能提供的最好建议,考虑到我对OpenCV的有限了解。


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