问题描述
我正在尝试显示来自 1394 相机的实时图像.目前,我的代码能够从相机循环获取图像,并且我正在寻找任何可以动态更新的快速 GUI(作为单独的线程).我可以在 PyQt 中做到这一点,也许使用 QThreads 但有什么建议或更快的方法吗?这是我的代码
I am trying to display live images from my 1394 camera. Currently my code is able to obtain images in a loop from the camera and I was looking for any quick GUI that will update dynamically (as a separate thread). I can do this in PyQt maybe using QThreads but is there any recommendation or faster way of doing this?? Here's my code
#循环从相机捕捉帧
for frame in range(1,500): print 'frame:',frame TIME.sleep(1) #capture frame every second image_binary = pycam.cam.RetrieveBuffer() #convert to PIL Image pilimg = PIL.Image.frombuffer("L",(cimg.GetCols(),cimg.GetRows()),image_binary,'raw', "RGBA", 0, 1) # At this point I want to send my image data to a GUI window and display it
谢谢.
推荐答案
这是 wxPython 代码...
import wx from PIL import Image SIZE = (640, 480) def get_image(): # Put your code here to return a PIL image from the camera. return Image.new('L', SIZE) def pil_to_wx(image): width, height = image.size buffer = image.convert('RGB').tostring() bitmap = wx.BitmapFromBuffer(width, height, buffer) return bitmap class Panel(wx.Panel): def __init__(self, parent): super(Panel, self).__init__(parent, -1) self.SetSize(SIZE) self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self.Bind(wx.EVT_PAINT, self.on_paint) self.update() def update(self): self.Refresh() self.Update() wx.CallLater(15, self.update) def create_bitmap(self): image = get_image() bitmap = pil_to_wx(image) return bitmap def on_paint(self, event): bitmap = self.create_bitmap() dc = wx.AutoBufferedPaintDC(self) dc.DrawBitmap(bitmap, 0, 0) class Frame(wx.Frame): def __init__(self): style = wx.DEFAULT_FRAME_STYLE & ~wx.RESIZE_BORDER & ~wx.MAXIMIZE_BOX super(Frame, self).__init__(None, -1, 'Camera Viewer', style=style) panel = Panel(self) self.Fit() def main(): app = wx.PySimpleApp() frame = Frame() frame.Center() frame.Show() app.MainLoop() if __name__ == '__main__': main()