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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

4968閲覧

動画のフレーム分割について

mikanken

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/01/15 12:15

動画を読み込み、各フレームごとに画像をトリミング、リサイズして画像を保存するプログラムを書いているのですが、毎秒3回、毎秒5回など、動画を分割するタイミングを変更し画像を保存するにはどうすればよいでしょうか?

c++

1#include <opencv2/core.hpp> 2#include <opencv2/videoio.hpp> // videoioのヘッダーをインクルード 3#include <opencv2/highgui.hpp> // highguiのヘッダーをインクルード 4#include <iostream> 5#include <opencv2/imgproc/imgproc.hpp> 6 7int main(int argc, const char* argv[]) 8{ 9 char filename[80]; 10 int filenumber; 11 // (1)動画ファイルを開くための準備を行う 12 cv::VideoCapture cap("test2.mov"); 13 14 // (2)動画ファイルが正しく開けているかをチェックする(正しく開けていなければエラー終了する) 15 if (!cap.isOpened()) 16 return -1; 17 18 19 // 画像データを格納するための変数を宣言する 20 cv::Mat frame; 21 filenumber =1; 22 for (;;) 23 { 24 // (3)動画ファイルから1フレーム分の画像データを取得して、変数frameに格納する 25 cap >> frame; 26 27 cv::Rect roi(320, 240, 640, 480); 28 cv::Mat frame2(frame, roi); 29 cv::resize(frame2, frame2, cv::Size(),0.5, 0.5); 30 // 画像データ取得を取得できたら書き込み。 31 if (!frame2.empty()){ 32 sprintf(filename,"cutx0.5_img%d.jpg",filenumber++); 33 cv::imwrite(filename,frame2); 34 } 35 if (cv::waitKey(30) >= 0) break; 36 } 37 38 return 0; 39}

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

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

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

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

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

guest

回答2

0

30fpsとすると、『1秒間に5枚』は『6枚に1回』と同義です。
for文にカウンタを追加し、if文で分岐するのが最も簡単な実装かと。

投稿2018/01/15 12:40

LouiS0616

総合スコア35660

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

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

0

自己解決

うまくいきました。申し訳御座いません。

投稿2018/01/15 12:38

mikanken

総合スコア10

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問