gpt4 book ai didi

python - 使用 wxpython 闪烁显示网络摄像头视频

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:46 34 4
gpt4 key购买 nike

我是 python 新手。我正在尝试编写一个运动检测应用程序。目前,我正在尝试让网络摄像头视频显示在屏幕上。目前的代码一开始没有闪烁,但在调整大小后,闪烁会回来。有什么线索吗?另外,为什么在计时器事件中没有 self.Refresh() 它就不能工作,除非框架被最小化,否则绘制事件不会总是发生吗?提前致谢。

import wx
import cv

class LiveFrame(wx.Frame):

fps = 30


def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, title="Live Camera Feed")

self.SetDoubleBuffered(True)
self.capture = None
self.bmp = None
#self.displayPanel = wx.Panel(self,-1)

#set up camaera init
self.capture = cv.CaptureFromCAM(0)
frame = cv.QueryFrame(self.capture)
if frame:
cv.CvtColor(frame,frame,cv.CV_BGR2RGB)
self.bmp = wx.BitmapFromBuffer(frame.width,frame.height,frame.tostring())
self.SetSize((frame.width,frame.height))
self.displayPanel = wx.Panel(self,-1)

self.fpstimer = wx.Timer(self)
self.fpstimer.Start(1000/self.fps)
self.Bind(wx.EVT_TIMER, self.onNextFrame, self.fpstimer)
self.Bind(wx.EVT_PAINT, self.onPaint)

self.Show(True)

def updateVideo(self):
frame = cv.QueryFrame(self.capture)
if frame:
cv.CvtColor(frame,frame,cv.CV_BGR2RGB)
self.bmp.CopyFromBuffer(frame.tostring())
self.Refresh()


def onNextFrame(self,evt):
self.updateVideo()
#self.Refresh()
evt.Skip()

def onPaint(self,evt):
#if self.bmp:
wx.BufferedPaintDC(self.displayPanel, self.bmp)

evt.Skip()

if __name__=="__main__":
app = wx.App()
app.RestoreStdio()
LiveFrame(None)
app.MainLoop()

最佳答案

我已经找到了解决这个问题的方法。闪烁来自面板清除其背景。我必须创建一个面板实例并绕过它的 EVT_ERASE_BACKGROUND。另一件事是我必须将网络摄像头例程放在该面板内,并在面板本身上绘制 BufferPaintedDC。出于某种原因,如果 wx.BufferedPaintedDC 正在从框架绘制到 self.displaypanel ,闪烁仍然存在。

关于python - 使用 wxpython 闪烁显示网络摄像头视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460625/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com