gpt4 book ai didi

c++ - 在第二个线程中显示图像,OpenCV?

转载 作者:IT老高 更新时间:2023-10-28 22:59:52 24 4
gpt4 key购买 nike

我有一个循环以 250fps 的速度从高速帧抓取器中获取图像。

/** Loop processes 250 video frames per second **/
while(1){
AcquireFrame();
DoProcessing();
TakeAction();
}

同时,我希望用户能够监控正在发生的事情。用户只需要以大约 30 fps(或更低)的速度查看图像。如何设置第二个线程,每隔一段时间显示当前帧?

Thread(){
cvShowImage();
Wait(30); /** Wait for 30 ms **/
}

我在 Windows 上使用 MinGW、gcc 和 OpenCV 1.1 的四核 Intel 机器。主要标准是显示线程必须尽可能少地离开我的主处理循环。每一毫秒都很重要。

我已经尝试使用 CreateThread() 来创建一个带有 cvShowImage()cvWaitKey() 的新线程,但是 apparently those functions are not threadsafe .

我正在考虑使用 OpenMP,但有些人 report problems with OpenMP and OpenCV .我也在考虑尝试使用 DirectX directDraw,因为它显然非常快。但它looks complicated显然有problems using Windows DLL's with MinGw .

这些途径中的哪一个是最好的起点?

最佳答案

好的。很尴尬的是,我的问题也是它自己的答案。

使用我的问题中描述的 CreateThread()CvShowImage()CvWaitKey() 确实有效 - 与一些帖子相反否则建议的网络。

无论如何,我实现了这样的东西:

/** Global Variables **/
bool DispThreadHasFinished;
bool MainThreadHasFinished;
iplImage* myImg;

/** Main Loop that loops at >100fps **/
main() {
DispThreadHasFinished = FALSE;
MainThreadHasFinished = FALSE;
CreateThread(..,..,Thread,..);

while( IsTheUserDone() ) {
myImg=AcquireFrame();
DoProcessing();
TakeAction();
}
MainThreadHasFinished = TRUE;

while ( !DisplayThreadHasFinished ) {
CvWaitKey(100);
}

return;
}

/** Thread that displays image at ~30fps **/
Thread() {
while ( !MainThreadHasFinished ) {
cvShowImage(myImg);
cvWaitKey(30);
}
DispThreadHasFinished=TRUE;
return;
}

当我最初发布这个问题时,我的代码由于不相关的原因而失败。我希望这会有所帮助!

关于c++ - 在第二个线程中显示图像,OpenCV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com