我只是想从我的网络摄像头OpenCV的视频流整合到一个更复杂的图形用户界面比highgui可以提供,没有什么花哨只是一对夫妇的按钮和其他东西的,但它被证明是没有那么简单。 我找不到任何基地例如从中我可以开始设计的GUI。 我想这个转换代码到新的OpenCV接口相当差的结果。 我是一个新来的OpenCV,numpy的和GUI设计。 有些时候确实流的视频,但大部分时间只是挂在那儿。 我想我的一个错误可能是wx.BitmapFromBuffer(列,行,IMG),因为在他们使用PIL图像格式的旧版本,现在它的使用numpy的阵列,所以在原代码中使用的PIL功能“的imageData”,而不是直接传递numpy的阵列为我做的。 任何帮助它真的赞赏。
这是我的代码转换。
import wx
import cv2
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.displayPanel = wx.Panel(self)
self.displayPanel.SetSize(wx.Size(800,640))
self.cam = cv2.VideoCapture(1)
self.cam.set(3, 640)
self.cam.set(4, 480)
ret, img = self.cam.read()
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
row, col, x = img.shape
self.SetSize((col,row))
self.bmp = wx.BitmapFromBuffer(col, row, img)
self.displayPanel.Bind(wx.EVT_PAINT, self.onPaint)
self.playTimer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.onNextFrame)
self.playTimer.Start(1000/15)
def onPaint(self, evt):
if self.bmp:
dc = wx.BufferedPaintDC(self.displayPanel)
self.PrepareDC(dc)
dc.DrawBitmap(self.bmp, 0, 0, True)
evt.Skip()
def onNextFrame(self, evt):
ret, img = self.cam.read()
if ret == True:
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
self.bmp.CopyFromBuffer(img)
self.displayPanel.Refresh()
evt.Skip()
if __name__=="__main__":
app = wx.App()
MyFrame(None).Show()
app.MainLoop()