웹캠에서 비디오를 표시하려고합니다. 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를 사용하려고 시도 할 때 free에 잘못된 포인터가 전달되었다는 seg 오류가 발생합니다.