繁体   English   中英

Opencv和PyGi:如何显示OpenCV读取的图像

[英]Opencv & PyGi : how to display an image read by opencv

我想在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和PyGi进行交互的正确方法吗? 我设法将opencv与Tkinter一起使用,但未能与PyGi一起使用。

您可以尝试使用GdkPixbuf.PixbufLoader:

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

这实际上对我来说很好。 也许您遇到的问题是两个不同的变量“ 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM