#coding: utf-8
#ヴィデオをFrameに表示する。Frameを閉じると停止する。
import wx
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
#フレームに画像を表示する
class myFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.Bind(wx.EVT_CLOSE, self.frame_close)
#フレームを閉じると発生するイヴェント
self.stopFlag=False
#第1フレームの読み込み(フレームサイズを決める
ret, image = cap.read()
image = cv2.flip(image, 1)
cv2image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#配列データからwx.Imageへの変換
self.wximage=wx.Image(cv2image.shape[1], cv2image.shape[0], cv2image)
bitmap =self.wximage.ConvertToBitmap()
self.stbmp=wx.StaticBitmap(self, -1, bitmap, (0,0), self.GetClientSize())
#ビットマップを表示
self.SetSize(self.wximage.GetSize())
#フレームの大きさを画像サイズに合わせる
self.stream()
def stream(self):
def updateFrame():
if self.stopFlag:
return
ret, image = cap.read()
image = cv2.flip(image, 1)
cv2image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
self.wximage=wx.Image(cv2image.shape[1], cv2image.shape[0], cv2image)
bitmap =self.wximage.ConvertToBitmap()
self.stbmp.SetBitmap(bitmap)
#bitmapの再描画
wx.CallLater(33, updateFrame) #フレーム・レートの調整
updateFrame()
def frame_close(self, event):
#閉じたときに発生するイベントの処理
self.stopFlag=True
wx.CallLater(100, self.Destroy)
def main():
app = wx.App(False)
frame = myFrame(None, "Display Video")
frame.Show()
app.MainLoop()
if __name__ == '__main__':
main()