【问题标题】:Semaphore based synchronization for opencv based image processing基于信号量的基于 opencv 的图像处理的同步
【发布时间】:2011-10-08 00:24:26
【问题描述】:

我正在尝试使用信号量来同步 OpenCV 图像进程的两个线程。一个线程不断从网络摄像头捕获帧并将其推送到循环缓冲区中,另一个流从缓冲区中提取图像并处理它们。我正在删除处理它们后使用的框架。

我正在使用 boost 循环缓冲区库来实现缓冲区。

请在下面找到确切的代码 sn-p。我已经消除了大部分初始化并突出显示了必要的部分。我面临的问题是我能够流式传输和捕获网络摄像头的帧。但是有时窗口会冻结。在某些情况下,捕获的帧无法正确显示。我可以知道我哪里出错了吗?

    sem_t semaphore;

  using namespace cvb;

  using namespace std;



  CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );

    IplImage* img0;

    IplImage* img1;

    sem_t semaphore;

   boost::circular_buffer<IplImage*> cb1(200);

   int ret = sem_init(&semaphore, 1, 10); //Initializing the semaphore


void* Capture(void* arg){    



       while(1) {           
                     sem_wait(&semaphore);

             img0 = cvQueryFrame( capture );        

             cb1.push_back(img0);

            cvShowImage( "mywindow", img0 );

            sem_post(&semaphore);


        if ( (cvWaitKey(10) & 255) == 27 ) break;

                } 



}

    void* ImageProcessing(void* arg) {      

                    while(1) {                          


            if(!cb1.empty()) {
                                   sem_wait(&semaphore);
                               img2 =  cvShowImage("result",img2);                      

                                   cb1.pop_front();          
                            sem_post(&semaphore);
                                }


                        if ( (cvWaitKey(10) & 255) == 27 ) break;

                        }   
                                cvReleaseCapture( &capture );

                                cvReleaseImage( &img2 );

                    }

【问题讨论】:

    标签: multithreading boost opencv synchronization semaphore


    【解决方案1】:

    CaptureImageProcessing 在不同的线程中运行,不是吗?我曾经尝试从不同的线程更新 HighGui 窗口,但没有成功。

    这实际上是大多数(如果不是全部)窗口系统的问题:您不能从不同的线程调用来更新窗口。

    尝试将两个cvShowImage 调用放在同一个线程中。对cvWaitKey 的调用可能也必须在同一个线程中进行。

    可能是cvShowImage 必须在您使用cvNamedWindow 初始化窗口的同一线程中调用。不过,我不确定。

    【讨论】:

    • 谢谢!你的建议有帮助!窗户不再结冰。我要写博客了
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2011-07-19
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多