我正在尝试在wxPython中显示带有Python接口的OpenCV。我可以显示它,但只能显示在视频左上角的一小部分。我的代码有什么问题?它是父面板的尺寸还是其他尺寸?请注意,我使用的是此https://stackoverflow.com/a/14818080/2389238中的代码,它可以完美运行,但是我需要在面板(或其他父框架)中显示它。
预先感谢。
import wx
import cv, cv2
class MainWindow(wx.Panel):
def __init__(self, parent,capture):
wx.Panel.__init__(self, parent)
mainSizer = wx.BoxSizer(wx.VERTICAL)
self.inputBox = wx.TextCtrl(self)
mainSizer.Add(self.inputBox, 0, wx.ALL, 5)
# video
videoWarper = wx.StaticBox(self, label="Video",size=(640,480))
videoBoxSizer = wx.StaticBoxSizer(videoWarper, wx.VERTICAL)
videoFrame = wx.Panel(self, -1,size=(640,480))
cap = ShowCapture(videoFrame, capture)
videoBoxSizer.Add(videoFrame,0)
mainSizer.Add(videoBoxSizer,0)
parent.Centre()
self.Show()
self.SetSizerAndFit(mainSizer)
class ShowCapture(wx.Panel):
def __init__(self, parent, capture, fps=24):
wx.Panel.__init__(self, parent)
self.capture = capture
ret, frame = self.capture.read()
height, width = frame.shape[:2]
parent.SetSize((width, height))
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.bmp = wx.BitmapFromBuffer(width, height, frame)
self.timer = wx.Timer(self)
self.timer.Start(1000./fps)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_TIMER, self.NextFrame)
def OnPaint(self, evt):
dc = wx.BufferedPaintDC(self)
dc.DrawBitmap(self.bmp, 0, 0)
def NextFrame(self, event):
ret, frame = self.capture.read()
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.bmp.CopyFromBuffer(frame)
self.Refresh()
capture = cv2.VideoCapture(0)
app = wx.App(False)
frame = wx.Frame(None,-1,'HGA Count',size=(400, 400))
panel = MainWindow(frame,capture)
frame.Show()
app.MainLoop()
这是图像:http : //i58.tinypic.com/2u5t7kh.png抱歉,由于信誉不好,我不能在此处放置图像。
基本上,没有什么可将ShowCapture
窗口大小设置为所需的大小,因此它仍停留在某些默认大小。最简单的解决方案可能是根本不需要videoFrame
,因为似乎不需要它,而只是cap
使用所需的初始大小创建自己,这也会成为最小的窗口大小。
问题更新后继续进行:
wxVERTICAL
盒子大小调整器,则是水平的…您猜到了),则具有正比例;如果您希望其wxEXPAND
在另一个方向上增长,则进行标记。当然,或者两者兼而有之,如果您希望它朝两个方向发展。videoFrame
并不是必须的,实际上,videoWarper
如果您使用3.0以获得最佳效果,则wxStaticBoxSizer
应该将其wxStaticBox
作为视频窗口的子项:从3.0开始,应以a的内容作为父项来创建a的内容。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句