在wx.panel中使用OpenCV与python和wxPython一起显示VideoCapture:仅显示视频的一小部分

温柔的雨林

我正在尝试在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抱歉,由于信誉不好,我不能在此处放置图像。

VZ。

基本上,没有什么可将ShowCapture窗口大小设置为所需的大小,因此它仍停留在某些默认大小。最简单的解决方案可能是根本不需要videoFrame,因为似乎不需要它,而只是cap使用所需的初始大小创建自己,这也会成为最小的窗口大小。


问题更新后继续进行:

  1. 您可以使用大小调整器自动调整其大小,并确保:
    • 该项目本身会增长,即,如果您希望它在大小调整器的主方向上增长(正值,对于wxVERTICAL盒子大小调整器,则是水平的…您猜到了),则具有正比例;如果您希望其wxEXPAND在另一个方向上增长,则进行标记。当然,或者两者兼而有之,如果您希望它朝两个方向发展。
    • 经常被遗忘的非常重要:包含的施胶剂本身也会增长。也就是说,如果窗口本身在其sizer中增长,而其窗口大小不在其自己的包含sizer中增长,则什么也不会发生。
  2. videoFrame并不是必须的,实际上,videoWarper如果您使用3.0以获得最佳效果,则wxStaticBoxSizer应该将其wxStaticBox作为视频窗口的子项:从3.0开始,应以a的内容作为父项来创建a的内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Python中使用OpenCV翻译图像的一小部分

来自分类Dev

仅显示图像的一小部分

来自分类Dev

wxPython wx.CallAfter()

来自分类Dev

在wx.Panel中的wx.Frame中使用变量

来自分类Dev

wxPython wx.ScrolledWindow插入wx.Panel

来自分类Dev

SlidingPaneLayout-如何始终显示滑出视图的一小部分(例如在视频群聊中)

来自分类Dev

wxPython wx.Frame和wx.Dialog效果

来自分类Dev

自动完成扩展器仅显示网格中的一小部分

来自分类Dev

使用自动工具仅构建一小部分项目

来自分类Dev

在wx.wizard中使用wx.gauge

来自分类Dev

WxPython:导入wx.lib

来自分类Dev

在 wx.Panel 中滚动

来自分类Dev

如何使用Python在Outlook中提取邮件主体的一小部分?

来自分类Dev

wx python 图像质量下降

来自分类Dev

将 wx.grid 传递给 wx.frame WX.python

来自分类Dev

如何获得视频帧率的一小部分?

来自分类Dev

使用WX显示文件路径

来自分类Dev

Swift-背景图片不合适(显示全部图片的一小部分)

来自分类Dev

使用ifstream加载文件时出错-仅加载一小部分

来自分类Dev

使用查询+ have_posts()遍历Wordpress帖子仅返回其中的一小部分

来自分类Dev

svg导出为png仅使用Angular在JavaScript中导出渲染的svg的一小部分/小部分

来自分类Dev

Tkinter画布无法显示整个图像,一小部分被裁剪掉

来自分类Dev

使用vim处理大文件的一小部分的最佳方法

来自分类Dev

如何使用ginput剪切图像的一小部分?

来自分类Dev

将 wx 帧绑定在一起

来自分类Dev

wxPython wx.lib.plot.PlotCanvas错误

来自分类Dev

wxPython wx.TextCtrl是不可编辑的

来自分类Dev

wxPython-wx.StaticText无法正确对齐

来自分类Dev

ERLANG wx小部件加载png

Related 相关文章

热门标签

归档