我试图从网络摄像头显示视频。我使用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已经传递了一个无效指针。