tags:

views:

489

answers:

1

I am using opencv 1.0.0 and gtk2.0. I want to grab images continuously from a video stream. So far I have successfully been able to grab still image. This is non standard IP camera not VGA/USB /V4L one so need to know explicit method to refresh or update images continuously for video streaming!

GtkWidget *image;

... ...

IplImage* bayerImage = NULL; IplImage* rgbImage = NULL;

... ... ...

cvCvtColor( bayerImage, rgbImage, CV_BayerBG2RGB ); // Usually opencv image is BGR, so we need to change it to RGB

  pix = gdk_pixbuf_new_from_data ((guchar*)rgbImage->imageData,
                 GDK_COLORSPACE_RGB,
                 FALSE,
                rgbImage->depth,
                rgbImage->width,
                rgbImage->height,
                 (rgbImage->widthStep),
                  NULL,
                  NULL);
     image = gtk_image_new_from_pixbuf (pix);  
A: 

/* (c) 2010 Virgoptrex. Feel Free to use. Leave credits intact */

`#include gtk/gtk.h

gint t=0;

 gboolean
 expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
 {

 gtk_widget_queue_draw(GTK_WIDGET(widget));

 //g_object_ref_sink (widget->window);

 // gdk_drawable_ref (widget->window);

   gdk_draw_arc (widget->window,
                 widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
                 TRUE,
                 0, 0, widget->allocation.width, widget->allocation.height,
                 0, 64 * 18*t);

  //gdk_drawable_unref (widget->window);



   return TRUE;
 }

static gboolean time_handler(GtkWidget *widget) {

if (t<20) { t++; } else if (t >=20) { t=0; }

printf("hello %d\n",t); return TRUE;

}

int main( int argc, char *argv[] ) { GtkWidget *window; GtkWidget *aspect_frame; GtkWidget *drawing_area; gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);



gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");
g_signal_connect (G_OBJECT (window), "destroy",
              G_CALLBACK (gtk_main_quit), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);

/* Create an aspect_frame and add it to our toplevel window */

aspect_frame = gtk_aspect_frame_new ("2x1", /* label */
                                     0.5, /* center x */
                                     0.5, /* center y */
                                     2, /* xsize/ysize = 2 */
                                     FALSE /* ignore child's aspect */);

gtk_container_add (GTK_CONTAINER (window), aspect_frame);
gtk_widget_show (aspect_frame);

/* Now add a child widget to the aspect frame */

drawing_area = gtk_drawing_area_new ();

/* Ask for a 200x200 window, but the AspectFrame will give us a 200x100
 * window since we are forcing a 2x1 aspect ratio */
gtk_widget_set_size_request (drawing_area, 200, 200);
gtk_container_add (GTK_CONTAINER (aspect_frame), drawing_area);
gtk_widget_show (drawing_area);

 g_signal_connect (G_OBJECT (drawing_area), "expose_event",
                     G_CALLBACK (expose_event_callback), NULL);

g_timeout_add(100, (GSourceFunc) time_handler, (gpointer)drawing_area);


gtk_widget_show (window);
gtk_main ();
return 0;

}`

`

virgoptrex