5
我正在嘗試使用信號量來同步兩個OpenCV圖像處理線程。一個線程不斷捕獲網絡攝像頭的幀並將其推入循環緩衝區,另一個線程從緩衝區中提取圖像並處理它們。我在處理它們之後刪除了我使用的框架。基於信號量的基於opencv的圖像處理同步
我正在使用boost循環緩衝區庫來實現緩衝區。
請在下面找到具體的代碼段。我已經消除了大部分的初始化並強調了必要的。我面臨的問題是我能夠流式傳輸並捕獲我的攝像頭的幀。但有時窗口會凍結。在某些情況下,捕獲的幀不能正確顯示。我可以知道我哪裏錯了嗎?
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);
}
謝謝!你的建議有幫助!窗戶不再凍結。我要去博客關於它 – Sai
我很高興它幫助:) –