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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

Q&A

解決済

1回答

1670閲覧

動画のサイズをトリミングしてから各フレームを読みこみ輝度を得たデータと,動画の各フレームを読みこんでからトリミングして輝度を得たデータの値が異なる→どちらが正しい?

Noriri12

総合スコア8

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

0グッド

0クリップ

投稿2021/06/15 02:25

疑問点

動画のサイズをトリミングしてから各フレームを読みこみ輝度を得たデータと,動画の各フレームを読みこんでからトリミングして輝度を得たデータの値が異なってしまいます.
動画のある1ピクセルだけ切り取り,輝度の時系列データを得たいのですがどちらが正しいのか,なぜ異なってしまうのかがわかりません.

該当のソースコード

①動画のサイズをトリミングしてから各フレームを読みこみ輝度を得る

Python

1#動画1ピクセル切り取り 2video_path='ビデオのパス' 3video=ffmpeg.input(video_path) 4X_start=0 5Y_start=0 6width=1 7height=1 8video=ffmpeg.crop(video,X_start,Y_start,width,height) 9#トリミングした動画保存 10output_file_str = video_path.split(".") 11output_file_name = output_file_str[0] + "_trimed." + output_file_str[1] 12video=ffmpeg.output(video,output_file_name) 13ffmpeg.run(video, overwrite_output=True) 14 15#ビデオの読みこみ 16video_path='トリミングしたビデオのパス' 17video=cv2.VideoCapture(video_path) 18 19#輝度を入れるリスト作成 20A=[] 21#輝度を求める繰り返し文 22while True: 23 ret,data=video.read() 24 if ret==True: 25 data=cv2.cvtColor(data, cv2.COLOR_BGR2GRAY) 26 data=np.ravel(data) 27 A.append(data) 28 else: 29 break 30 31A=np.ravel(A)

②動画の各フレームを読みこんでからトリミングして輝度を得る

Python

1#ビデオの読みこみ 2video_path='ビデオのパス' 3video=cv2.VideoCapture(video_path) 4 5#輝度を入れるリスト作成 6A=[] 7#輝度を求める繰り返し文 8while True: 9 ret,data=video.read() 10 if ret==True: 11 data=cv2.cvtColor(data, cv2.COLOR_BGR2GRAY) 12 data_trim=data[0:1,0:1] 13 data_trim=np.ravel(data_trim) 14 A.append(data_trim) 15 else: 16 break 17 18A=np.ravel(A)

試したこと

②のほうが,結果的に正しい気がするのですがなぜ異なってしまっているのか見当がつきません...
コードの長さ的にも②のほうがよいと思っています.

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

spyder(Python3.8)

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

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

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

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

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

y_waiwai

2021/06/15 02:29

具体的な情報がありませんが、どれだけ違ってくるんでしょうか
Noriri12

2021/06/15 02:38

フレームごとによって異なるのですが,最大で100ほど値が異なってしまいます. こちらの事情で詳細なデータを載せることができずすみません...
hoshi-takanori

2021/06/15 03:01

100 って 256 分の 100 ですか? そもそも 1x1 ピクセルってまともな動画にならないのでは…。
guest

回答1

0

ベストアンサー

トリミングした動画保存

のところで,非可逆な圧縮がかかっているのではないでしょうか.

投稿2021/06/15 02:31

fana

総合スコア11996

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

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

Noriri12

2021/06/15 02:40

圧縮の可能性について考慮していなかったです! となるとやはり,フレームごとに読みこんでからトリミングする方法がベストなのでしょうか?
fana

2021/06/15 02:53

わかりません.何をするのか?の意味次第ではないでしょうか. トリミングする前の動画も,やはり,相応に圧縮されているとしたら, そもそもその動画の画素値を見るのが「正しい」のだろうか? とかいう話もあり得るのかもしれませんし. トリミング前後で処理結果に差があるとしても, そもそも差が出るような箇所の画素値というのは着目すべき場所ではないのかもしれません. (行っている作業的に,その差の存在が特段の問題にならないのであれば,何も問題ないとも言える)
Noriri12

2021/06/15 04:18

そうですよね... ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問