Я пытаюсь отобразить видео с веб-камеры. Я снимаю изображения с веб-камеры с помощью opencv, а затем пытаюсь отобразить их на GtkImage.
Это мой код, который выполняется в отдельном потоке.
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 был передан неверный указатель.