我試圖從網絡攝像頭顯示視頻。我使用opencv從網絡攝像頭捕捉圖像,然後嘗試在GtkImage上顯示它們。GtkImage未更新,opencv也不會釋放圖像
這是我的代碼,它運行在一個單獨的線程中。
gpointer View::updateView(gpointer v)
{
IplImage *image;
CvCapture *camera;
GMutex *mutex;
View *view;
view=(View*)v;
camera=view->camera;
mutex=view->cameraMutex;
while(1)
{
g_mutex_lock(view->cameraMutex);
image=cvQueryFrame(camera);
g_mutex_unlock(view->cameraMutex);
if(image==NULL) continue;
cvCvtColor(image,image,CV_BGR2RGB);
GDK_THREADS_ENTER();
g_object_unref(view->pixbuf);
view->pixbuf=gdk_pixbuf_new_from_data((guchar*)image->imageData,GDK_COLORSPACE_RGB,FALSE,image->depth,image->width,image->height,image->widthStep,NULL,NULL);
gtk_image_set_from_pixbuf(GTK_IMAGE(view->image),view->pixbuf);
gtk_widget_queue_draw(view->image);
GDK_THREADS_LEAVE();
usleep(10000);
}
}
會發生什麼情況是一個圖像從網絡攝像頭中獲取並顯示,然後GtkImage停止更新。
另外,當我嘗試使用cvReleaseImage時,我得到一個seg錯誤,說明free已經傳遞了一個無效指針。