実現したいこと
tkinter画面でカメラのリアルタイムの映像を表示し、スナップショットを実施したい。
エラーはでるものの一応作動しますが、動作がとても遅いです。
import tkinter as tk import cv2 from PIL import Image,ImageTk import numpy as np import tkinter.filedialog as fl import tkinter.messagebox as mb import matplotlib.pyplot as plt import tkinter.ttk as ttk root=tk.Tk() root.title("カメラソフトウェア") root.geometry("800x600") root.resizable(width=False, height=False) #リアルタイム映像を表示するキャンバス作成 canvas1=tk.Canvas(root, width=640, height=480, bg="white") canvas1.place(x=0,y=0) ######################################################################################### #動画を常に表示しておくプログラム def capStart(): try: global c, w, h, img c = cv2.VideoCapture(1) c.set(3,640)#Width:L;1280,2L;1600,A4;2048#プロパティの設定 c.set(4,480)#Height:L;960,2L;1200,A4;1536#プロパティの設定 w, h= c.get(cv2.CAP_PROP_FRAME_WIDTH), c.get(cv2.CAP_PROP_FRAME_HEIGHT)#プロパティの取得 #print('w:'+str(w)+'px+h:'+str(h)+'px') except: import sys print("error-----") print(sys.exec_info()[0]) print(sys.exec_info()[1]) '''終了時の処理はここでは省略します。 c.release() cv2.destroyAllWindows()''' def u():#update global img ret, frame =c.read() if ret: img=ImageTk.PhotoImage(Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))) canvas1.create_image(w/2,h/2,image=img) else: print("u-Fail") root.after(1,u) capStart() u() ############################################################################################ #スナップショットの関数 def press_snapshot_button(): _, frame=c.read() cv2.imwrite("1021_OK_1.png",frame) ############################################################################################ #スナップショットした画像を別画面に表示する方法 def press_snapshot_Kousin_button(): root2=tk.Tk() root2.title("蒸気流量計読み取りソフトウェア") root2.geometry("640x480") root2.resizable(width=False, height=False) #画像読み込み global img2 img=Image.open("0915.jpg") img2=ImageTk.PhotoImage(img,master=root2) #キャンバス2に画像を表示 canvas=tk.Canvas(root2, width=640, height=480, bg="white") canvas.place(x=0,y=0) canvas.create_image(0,0,image=img2, anchor='nw' ) ########################################################################################### button1 = tk.Button(root, text=u'撮影',height=5,width=15,relief="ridge", command=press_snapshot_button) button1.place(x=40,y=500) button1 = tk.Button(root, text=u'更新',height=5,width=15,relief="ridge", command=press_snapshot_Kousin_button) button1.place(x=150,y=500) root.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。