質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

619閲覧

Pythonにおける出力結果(動画.avi)の保存方法

osietesan

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/03 06:45

前提・実現したいこと

Pythonにおける出力結果(動画.avi)の保存方法について

発生している問題・エラーメッセージ

初心者ゆえにできないという状況です。 エラーメッセージ:なし

該当のソースコード

ソースコード import cv2 import numpy as np import os import csv import matplotlib.pyplot as plt def mouse_event(event, x, y, flags, params): if event == cv2.EVENT_MOUSEMOVE: cv2.line(frame, (x, 0), (x, h-1), (255, 255, 255), 1) cv2.line(frame, (0, y), (w-1, y), (255, 255, 255), 1) cv2.imshow(name, frame) if event == cv2.EVENT_LBUTTONDOWN: position = (x, y) print(x, y) data.append([x, y]) return x, y def edge_left(center_px, w, thr_L): Edge_L = [] for i in range(w-1, 0, -1): if center_px[i] > thr_L: Edge_L.append(i) return Edge_L def edge_right(center_px, w, thr_R): Edge_R = [] for i in range(w-1, 0, -1): if center_px[i] > thr_R: Edge_R.append(i) return Edge_R def frm_show(frame, Edge_L, Edge_R, name): cv2.line(frame, (Edge_L[0], 0), (Edge_L[0], h-1), (255, 0, 0), 1) cv2.line(frame, (Edge_R[0], 0), (Edge_R[0], h-1), (0, 0, 255), 1) cv2.imshow(name, frame) return movie = input("DRUG&DROP YOUR FiLE(AVI):") movie = movie.lstrip("'").rstrip("'") name = os.path.basename(movie) t_sta = input("TYPE START TIME (s): ") t_sta = int(t_sta) t_fin = input("TYPE FINISH TIME (s): ") t_fin = int(t_fin) thr_L = int(238) thr_R = input("temperature(℃): ") thr_R = float(thr_R)*0.6036 thr_R = int(thr_R) cap = cv2.VideoCapture(movie) h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) fps = round(cap.get(cv2.CAP_PROP_FPS)) cnt = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) cap.release() data = [] cap = cv2.VideoCapture(movie) while (cap.isOpened()): ret, frame = cap.read() cv2.namedWindow(name, cv2.WINDOW_NORMAL) cv2.imshow(name, frame) cv2.setMouseCallback(name, mouse_event) if cv2.waitKey(25)&0xFF == 13: break cv2.destroyAllWindows() y = data[1][1] - data[0][1] dy = 20 / y#1ピクセルあたりの長さ center_y = int(data[0][1] + y/2)#試料中心軸のy座標 frm_sta = t_sta * fps frm_fin = t_fin * fps frm = [] left = [] right = [] for n in range(frm_sta, frm_fin,1): cap.set(cv2.CAP_PROP_POS_FRAMES, n) ret, frame = cap.read() frm_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)#BGR→RGB frm_gray = cv2.cvtColor(frm_rgb, cv2.COLOR_RGB2GRAY)#グレースケール化 center_px = frm_gray[center_y, :] #試料中心の画素値の読取 Edge_L = edge_left(center_px, w, thr_L) Edge_R = edge_right(center_px, w, thr_R) frm_show(frame, Edge_L,Edge_R,name) frm.append(n) left.append(Edge_L[0])#左の端のx座標 right.append(Edge_R[0])#右の端のx座標 if cv2.waitKey(1) & 0xFF == 27: print("ESCAPED") break if n >= frm_fin: print("FINISHED") break cap.release() cv2.destroyAllWindows() frm = np.array(frm) left = np.array(left) right = np.array(right) time = [] Length = [] time = (frm[:]-frm_sta)/fps Left = left*dy Right = right*dy Length = Right - Left output = np.array([time, Left, Right, Length]) output = output.T func_l = np.poly1d(np.polyfit(time, Left,1)) a_l, b_l = np.polyfit(time, Left, 1) Left2 = [] Left2 = a_l*time[:]+b_l func_r = np.poly1d(np.polyfit(time, Right,1)) a_r, b_r = np.polyfit(time, Right, 1) Right2 = [] Right2 = a_r*time[:]+b_r ave_L = np.mean(Length) f = open(movie.rstrip(".avi") + "_FL.csv", "w") f_writer = csv.writer(f, lineterminator = '\n') f_writer.writerow(["Ave.PL (mm)", ave_L]) f_writer.writerow(["Time","Left","Right","Length"]) f_writer.writerow(["(sec)", "(mm)","(mm)","(mm)"]) f_writer.writerows(output) f.close() plt.rcParams["font.family"] = "Arial" plt.rcParams["figure.figsize"] = [5,5] plt.rcParams["xtick.direction"] = "in" plt.rcParams["ytick.direction"] = "in" fig = plt.figure() ax1 = fig.add_subplot(111) ax1.text(0.33,0.93,"Ave.PL="+str(round(ave_L,2))+"mm", fontsize=13,transform=ax1.transAxes) plt.plot(time, Left, linestyle="None", marker="o", markeredgecolor="red", markerfacecolor="None", label="Flame Leading Edge", zorder=1) plt.plot(time, Right, linestyle="None", marker="o", markeredgecolor="blue", markerfacecolor="None", label="Flame Leading Edge", zorder=1) plt.plot(time, Left2, "black", linestyle="dashed", zorder = 1) plt.plot(time, Right2, "black", linestyle="dashed", zorder = 1) plt.xlabel("Time(s)",fontsize=15) plt.ylabel("Position(mm)", fontsize=15) plt.xticks(fontsize=13) plt.yticks(fontsize=13) plt.minorticks_on() plt.tight_layout() plt.savefig(movie.rstrip(".AVI")+"_PL.svg") plt.show()

試したこと

様々なサイトを参考にしましたが、できませんでした。

補足情報(FW/ツールのバージョンなど)

MacBook Pro 2018

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問