-1

我不明白为什么OpenCV在我们不需要使用cvNamedWindow创建OpenCV窗口时不起作用。其实我不想使用OpenCV GUI窗口,我想使用第三方GUI来显示抓取的帧,所以对于这个,我不需要创建OpenCV窗口。但是,当我不创建OpenCV窗口时,我的应用程序卡住了,没有任何工作,并且当我使用cvNamedWindow创建OpenCV窗口时,一切正常。如何在不显示或不创建cvNamedWindow的情况下抓取OpenCV框架?

任何建议,最新的原因是什么?我如何在不创建GUI窗口的情况下抓取OpenCV框架?

我使用的OpenCV 2.4.3(cvQueryFrame),VS2010 C++,WindowsXP的

感谢。

+1

没有看到一些源代码就很难给出任何建议。 –

+0

嗯,不是很简单吗?还有一件事,当我使用cvNamedWindow创建窗口时,以及在运行时如果关闭此窗口,OpenCV不再工作,一切都卡住了。看来OpenCV完全取决于cvNamedWindow。我不明白它 – furqan

+2

没有理由为什么OpenCV的行为应该像这样。必须有一个你看不到的问题。如果你没有发布代码,我们也看不到它。可能有一个'cvNamedWindow'强制一个消息循环,否则你会失踪 - 请发布一个最小的代码示例来显示问题。 –

回答

0

解决:问题在于,实际上,我在pthread内部创建了一个第三方GUI窗口,导致其无限更新。当我在pthread之外创建窗口时,它工作正常。

程序是这样的:

void Init() 
{ 
    createGUIwin(w, h); 
    init_pthread(); 
} 

void init_pthread(void*) 
{ 
    //createGUIwin(w, h); // before I was creating GUIwin here 
    while(ON) 
    { 
     frame = getOCVframe(); 
     UpdateGUIwin(frame); 
     key = cvWaitKey(10); 
    } 
} 

谢谢大家。我感谢你的回答。

2

您可能需要跳过waitKey()调用,太;)

(也请你帮个忙,并跳过C-API它是一个真正的皮塔饼,并会很快消失)

2

这是因为您以比相机可输出更快的速度抓取图像。你需要给你的while循环添加一点延迟。如果你的相机的功率为25FPS,你应该增加〜1/25秒左右。

相关问题