我想在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。
答案 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()