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

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

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

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

C++

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

Q&A

解決済

2回答

2282閲覧

opencvで動画のrisizeを行いたい

yezyez

総合スコア13

OpenCV

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

C++

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

1グッド

1クリップ

投稿2020/03/12 04:38

opencvにて動画を読み込みresize関数で動画サイズを1/4にした後、縮小された動画を保存したいと考えています

c++

1#include <opencv2/highgui/highgui.hpp> 2#include <opencv2/opencv.hpp> 3#include <opencv2/imgproc/imgproc.hpp> 4#include <opencv2/features2d/features2d.hpp> 5#include <opencv2/calib3d/calib3d.hpp> 6#include <opencv2/xfeatures2d/nonfree.hpp> 7#include <iostream> 8 9using namespace cv; 10using namespace std; 11 12 13 14int main(int argh, char* argv[]){ 15VideoWriter writer("movie.mp4", CV_FOURCC_MACRO('M', 'P', '4', 'V'), 30, Size(960, 540), true); 16 17Mat img_src1; 18int cols,rows; 19 20VideoCapture cap("movie2.mp4"); //Macの場合 21cap >> img_src1 ; 22 23//動画の表示 24int max_frame = cap.get(CV_CAP_PROP_FRAME_COUNT); //元動画のフレーム数 25for(int i = 0; i < max_frame; i++){ 26 27 cap >> img_src1 ; //1フレーム分取り出してimgに保持させる 28 //waitKey(1); // 表示のために1ms待つ 29 30 int width = img_src1.cols;//元動画の横幅 31 int height = img_src1.rows;//元動画の縦幅 32 33 Mat out; 34 resize(img_src1, out, Size(), 0.5, 0.5); 35 36 // waitKey(1);// 表示のために1ms待つ 37 38 writer << out; 39 40 //imshow( "resize", out);//リサイズ後の動画表示 41 42 //waitKey( 0 ); 43 44 } 45 destroyAllWindows(); 46 return 0; 47} 48

int max_frame = cap.get(CV_CAP_PROP_FRAME_COUNT); //元動画のフレーム数
for(int i = 0; i < max_frame; i++){
にて元動画のフレーム数分反復させ、それぞれの画像をリサイズし再度動画とて保存をしようとしています。

動画ファイルmovie.mp4自体は出力されています。

元動画の解像度は(1920,1080)です。

s.k👍を押しています

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

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

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

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

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

tiitoi

2020/03/12 04:53

質問の内容はなんでしょうか?
yezyez

2020/03/12 09:11

動画ファイル自体は作られるのですが動画を再生することができません、おそらくですが画像1フレームずつリサイズを行っているのですが動画としてつなげる部分がうまくできていないと思うのですが...
yominet

2020/03/12 12:36

1.リサイズしない場合は成功しますか? 2.保存側をmp4以外の形式ではどうなりますか?
guest

回答2

0

ベストアンサー

cap >> img_src1 がfor文の前にあって
動画のフレーム数を超えたアクセスをしてるからとかでしょうか

参考までに

int main(int argh, char* argv[]) { int max_frame; int width, height; VideoCapture cap("movie2.mp4"); //Macの場合 width = cap.get(CV_CAP_PROP_FRAME_WIDTH); height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); max_frame = cap.get(CV_CAP_PROP_FRAME_COUNT); //元動画のフレーム数 VideoWriter writer("movie.mp4", CV_FOURCC_MACRO('M', 'P', '4', 'V'), 30, Size(width/4, height/4), true); //動画の表示 for (;;) { Mat img_src1, Mat out; cap >> img_src1; //1フレーム分取り出してimgに保持させる if(img_src1.empty()){ return } resize(img_src1, out, Size(width/4, height/4)); writer << out; } return 0; }

投稿2020/03/13 00:52

編集2020/03/13 01:00
kome_as

総合スコア66

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

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

yezyez

2020/03/13 04:14

cap >> img_src1 がfor文の前にあったからでした。 単純なミスでしたご協力ありがとうございました。
guest

0

c++

1 //imshow( "resize", out);//リサイズ後の動画表示 2 3 //waitKey( 0 );

の部分を

c++

1 imshow( "resize", out);//リサイズ後の動画表示 2 waitKey( 1 );

で表示されませんか?

投稿2020/03/13 00:54

MasahikoHirata

総合スコア3747

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問