簡體   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