Opencv& PyGi:如何显示opencv读取的图像

时间:2015-05-06 06:37:58

标签: python opencv pygtk

我想在PyGi中显示图像,首先通过opencv读取图像。 但是,它失败了。

from gi.repository import Gtk, GdkPixbuf
import cv2
import numpy as np
window = Gtk.Window()
image = Gtk.Image()
image.show()
window.add(image)
window.show_all()
im = cv2.imread("file.bmp")
a = np.ndarray.tostring(img)
h, w, d = img.shape
p = GdkPixbuf.Pixbuf.new_from_data(a,GdkPixbuf.Colorspace.RGB, False, 8, w, h, w*3, None, None)
image.set_from_pixbuf(p)
Gtk.main()

但结果是黑色图像。 此外,如果我循环一组文件(目录中的多个.bmp文件),我得到了coredump(怀疑GdkPixbuf.Pixbuf.new_from_data)

使用opencv& amp;是否正确? PyGi互动? 我设法使用opencv与Tkinter,但我没有使用它与PyGi。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用GdkPixbuf.PixbufLoader:

loader = GdkPixbuf.PixbufLoader()
loader.write(img)
loader.close()
pixbuf = loader.get_pixbuf()
image = Gtk.Image.new_from_pixbuf(pixbuf)

答案 1 :(得分:0)

这实际上对我来说很好。也许您的案例中的问题是两个不同的变量' im' (您正在阅读简历图像)和' img' (你要转换成字符串的那个)?

这是一个简化的代码,可以帮助我显示来自摄像头的视频帧:

# OpenCV image:
cap = cv2.VideoCapture(0)
ret, img = cap.read()
# Gtk Image:
img_gtk = Gtk.Image()
# Do other things such as attaching the 'img_gtk' to a window/grid...

# Convert and display:
h, w, d = img.shape
pixbuf = GdkPixbuf.Pixbuf.new_from_data  (img.tostring(), GdkPixbuf.Colorspace.RGB, False, 8, w, h, w*3, None, None)
img_gtk.set_from_pixbuf (pixbuf)
img_gtk.show()