我想在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文件),我会得到核心转储(可疑GdkPixbuf.Pixbuf.new_from_data)
这是让opencv和PyGi交互的正确方式吗?我设法在Tkinter上使用了opencv,但我无法在PyGi上使用它。
发布于 2015-05-06 20:08:53
您可以尝试使用GdkPixbuf.PixbufLoader:
loader = GdkPixbuf.PixbufLoader()
loader.write(img)
loader.close()
pixbuf = loader.get_pixbuf()
image = Gtk.Image.new_from_pixbuf(pixbuf)发布于 2017-07-10 03:58:55
这对我来说真的很好。在您的例子中,问题可能是两个不同的变量'im‘(您正在读取CV图像)和'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()https://stackoverflow.com/questions/30069275
复制相似问题