OpenCV与GTK+结合使用

之前研究过OpenCV与Qt结合使用,毕设要用的Intel Joule开发板上安装Qt较为困难,不过它自带了GTK+3.0 GUI框架,于是研究了下是否可以在GTK+中显示OpenCV的图片,折腾了一下发现是可行的,记录一下方法。

OpenCV默认的imshow似乎使用的就是GTK+框架,在GTK中显示图片的方法参考以下这篇教程:

GTK常用控件之图片控件(GtkImage)

可以看到,GTK中的图片是使用GdkPixbuf结构体来保存的,而OpenCV 3.x中使用Mat类来保存图片,所以只要实现MatGdkPixbuf的转换即可在GTK中显示图片了,实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Mat Image;

// Mat(BGR) -> IplImage(RGB)
cvtColor(image, image, COLOR_BGR2RGB);
IplImage ipltmp = image;

// IplImage -> GdkPixbuf
GdkPixbuf * src = gdk_pixbuf_new_from_data(
(const guchar *)ipltmp.imageData,
GDK_COLORSPACE_RGB,
0,
ipltmp.depth,
ipltmp.width,
ipltmp.height,
ipltmp.widthStep,
NULL,
NULL);

关于gdk_pixbuf_new_from_data()GdkPixbuf的详细说明参见:

Gdk-pixbuf


参考资料:
How can I display an OpenCV IplImage in Gtk+/Gtkmm?
Converting cv::Mat to IplImage*