Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取OpenCV中窗口的大小_C_Opencv - Fatal编程技术网

获取OpenCV中窗口的大小

获取OpenCV中窗口的大小,c,opencv,C,Opencv,我在网上搜索过,但找不到答案,所以我想我可以问问这里的专家。在OpenCV中是否仍有获取当前窗口分辨率的方法?我尝试了cvGetWindowProperty传递窗口的命名实例,但找不到要使用的标志 任何帮助都将不胜感激。嗯。。。这并不是一个很好的答案(相当骇客!),但您可以随时调用cvGetWindowHandle。有了这个本机窗口句柄,我相信您可以找到一些本机调用来获取包含的图像大小。丑陋、粗糙、不便于携带,但考虑到我有限的OpenCV曝光量,这是我所能建议的最好方法。您可以分别使用形状[1]

我在网上搜索过,但找不到答案,所以我想我可以问问这里的专家。在OpenCV中是否仍有获取当前窗口分辨率的方法?我尝试了cvGetWindowProperty传递窗口的命名实例,但找不到要使用的标志


任何帮助都将不胜感激。

嗯。。。这并不是一个很好的答案(相当骇客!),但您可以随时调用
cvGetWindowHandle
。有了这个本机窗口句柄,我相信您可以找到一些本机调用来获取包含的图像大小。丑陋、粗糙、不便于携带,但考虑到我有限的OpenCV曝光量,这是我所能建议的最好方法。

您可以分别使用形状[1]形状[0]来获得窗口内容的宽度和高度。 我认为当你使用Open-CV时,来自相机的图像存储为一个Numpy数组,形状为[rows,cols,bgr_channels],比如[480640,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

e、 g


您可以设置OpenCV窗口的大小,因此请澄清为什么需要获取该大小?这意味着,如果你已经创建了它和/或调整了它的大小,那么你应该已经能够知道它的大小了。我正在后台运行一些依赖于屏幕分辨率的算法。无论饲料是从一个视频或网络摄像头,我需要的大小信息。我总是可以对大小进行硬编码并将其去掉,但是如果我在运行中加载不同的视频,或者如果我采用不同的网络摄像头分辨率,我希望自动获取信息,而不是为所有内容设置一个设置的大小。@aardvark,例如,为下一次算法迭代保留窗口几何图形在销毁窗口后(用户可以更改窗口大小)。答案是:在Win32/not上使用宏,然后使用GetSystemMetrics或XOpenDisplay+DefaultScreenOfDisplay
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)