| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
 |  
#include <stdlib.h>
#include <gtk/gtk.h>
#include <OpenCV/highgui.h>
#include <OpenCV/cv.h>
 
GtkWidget			*window = NULL;
 
GtkImage			*image_from_ocv(IplImage * img, int dst_w, int dst_h)
{
	GtkImage		*image = NULL;
    GdkPixbuf		*pix_src, *pix_dst;
 
    pix_src = gdk_pixbuf_new_from_data((guchar*)img->imageData, GDK_COLORSPACE_RGB, FALSE, 8, img->width, img->height, img->widthStep, NULL, NULL);
    pix_dst = gdk_pixbuf_scale_simple(pix_src, dst_w, dst_h, GDK_INTERP_BILINEAR);
	image = (GtkImage*)gtk_image_new_from_pixbuf(pix_dst);
	g_object_unref(pix_src);
	g_object_unref(pix_dst);
    return image;
}
 
void				display_image(gpointer capture)
{
	IplImage		*ocv_image = NULL;
	GtkImage		*gtk_image = NULL;
 
	if (!(ocv_image = cvQueryFrame(capture)))
		exit(-1);
	cvConvertImage(ocv_image, ocv_image, CV_CVTIMG_SWAP_RB);
	gtk_image = image_from_ocv(ocv_image, window->allocation.width, window->allocation.height);
	gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(gtk_image));
	gtk_widget_show(GTK_WIDGET(gtk_image));
}
 
int					main(int argc, char **argv)
{
	CvCapture		*capture = NULL;
 
	gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size(GTK_WINDOW(window), 500, 500);
	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
	gtk_widget_show(window);
	if (!(capture = cvCreateCameraCapture(0)))
		return (EXIT_FAILURE);
	g_timeout_add(100, display_image, capture);
	gtk_main();
    return EXIT_SUCCESS;
} | 
Partager