2016-12-17 55 views
1

OpenCV,如果我没有在捕获图像的显示循环中包含Cv2.WaitKey(1)行,则屏幕上不会显示图像。 在C++,phyton或C#上也会发生同样的情况。OpenCV - 在捕获循环中没有显示没有waitkey的图像

会是什么原因,并有另一种选择?

这个例子是在C#(opencvsharp):

VideoCapture cap = new VideoCapture(); 

Window w = new Window();  

cap.Open("animation.avi"); 

while (cap.Read(src)) { 
    Cv2.WaitKey(1); 
    w.ShowImage(src); 
} 
+0

@Rama Nah这更像是为什么你需要调用它才能看到图像。我认为他知道自己在做什么 –

回答

2

技术上highgui需要waitkey()在调用,以获得时间来更新窗口。

的OpenCV文档参照imshow()功能(ShowImage在C#):

这个函数应跟其显示为 指定的毫秒图像waitKey功能。否则,它将不会显示 图像。例如,waitKey(0)将无限地显示窗口 ,直到任何按键(它适用于图像显示)。 waitKey(25) 将显示一帧25 ms,之后显示将自动关闭 。 (如果你把它放在一个循环读取视频,将 显示视频一帧一帧)

(在C# WaitKey()

而关于waitKey()功能:

此功能是只有在HighGUI中可以获取和处理事件的方法,因此需要周期性地调用正常事件 处理,除非在涉及事件处理的环境中使用HighGUI。

+0

您能否提供一个链接或引用的OpenCV文档? – Rama

+0

http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html?highlight=waitkey –

+0

这个特定的OpenCV 3.1.0:http://docs.opencv.org/trunk/d7/dfc /group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7 –