C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++とOpenCVを使って動画をパソコンに保存する方法

動画を保存するには、まず保存先の場所を定義する必要があります。続いてFourCC(フォーシーシー)を指定します。FourCCとは「Four Character Code(4文字コード)」の略で、データ形式を識別するための4バイトの文字列のことです。さらに、動画を保存する際にはFPS(1秒あたりのフレーム数)を宣言するとともに、フレームサイズも指定する必要があります。

以下のプログラムは、デフォルトカメラからリアルタイムの映像ストリームを取得し、その動画をCディレクトリに保存する例です。C++とOpenCVを使って動画をパソコンに保存する手順を示しています。

サンプルコード

#include<opencv2/opencv.hpp>//VideoCaptureクラスとVideoWriterクラスを使用するためのOpenCVヘッダー//
#include<iostream>
using namespace std;
using namespace cv;
int main() {
    Mat myImage;//フレームを格納するための行列を宣言//
    VideoCapture cap(0);//VideoCaptureクラスのオブジェクトを作成し、デフォルトカメラから映像を取得//
    namedWindow("Video Player");//動画を表示するためのウィンドウを宣言//
    if(!cap.isOpened()){//映像ストリームが見つからない場合にエラーメッセージを表示//
        cout << "Failed to access the camera" << endl;
        system("pause");
        return -1;
    }
    int frame_width = cap.get(CAP_PROP_FRAME_WIDTH);//フレーム幅を取得//
    int frame_height = cap.get(CAP_PROP_FRAME_HEIGHT);//フレーム高さを取得//
    VideoWriter video("video1.mp4",10,17,Size(frame_width, frame_height));//VideoWriterクラスのオブジェクトを宣言//
    while (true){//動画を表示し続けるための無限ループ//
        cap >> myImage;
        if (myImage.empty()){//動画フレームが検出されない場合はループを抜ける//
            break;
        }
        video.write(myImage);//動画を書き込む//
        imshow("Video Player", myImage);//動画を表示//
        char c= (char)waitKey(25);
        if(c==27){//ESCキーで終了//
            break;
        }
    }
    cap.release();//バッファメモリを解放//
    video.release();
    return 0;
}

このプログラムを実行すると、指定したディレクトリに、定義した名前と形式で動画が保存されます。

プログラムのポイント

  • VideoCaptureクラス: カメラから映像を取得するために使用します。引数の「0」はデフォルトカメラを意味します。
  • VideoWriterクラス: 動画をファイルに書き込むためのクラスです。保存先のファイル名、FourCC、FPS、フレームサイズを指定して初期化します。
  • フレームサイズの取得: CAP_PROP_FRAME_WIDTHとCAP_PROP_FRAME_HEIGHTプロパティを使えば、カメラの解像度を自動的に取得できます。
  • 終了操作: waitKey(25)が25ミリ秒ごとにキー入力を監視し、ESCキー(ASCIIコード27)が押されるとループを抜けてプログラムを終了します。
  • リソースの解放: 処理完了後はrelease()を呼び出して、カメラおよびライターのバッファメモリを適切に解放しましょう。
  1. C++とOpenCVで二値画像(バイナリイメージ)を反転する方法

    二値画像(バイナリイメージ)の反転とは、ピクセル値を逆転させる処理のことです。視覚的な観点から見ると、二値画像を反転させると、白いピクセルは黒へ、黒いピクセルは白へと変換されます。この処理は、主に3つの関数を組み合わせて実現します。それぞれの手順を順番に見ていきましょう。ステップ1:カラー画像をグレースケールに変換するまず、cvtColor()関数を使って元の画像をグレースケール画像に変換します。この関数の基本形は次の通りです。cvtColor(original_image, grayscale_image, COLOR_BGR2GRAY);ステップ2:グレースケール画像を二値化する続いて、グ

  2. C++とOpenCVでバイナリ画像(二値画像)を作成する方法を解説

    バイナリ画像(二値画像)とは、黒と白の2色のみで表現されるデジタル画像のことです。画像処理の観点から見ると、バイナリ画像は「0」と「1」という2つの値しか持たないピクセルで構成されています。ピクセルの値が0の場合は純粋な黒を、値が1の場合は純粋な白を表します。グレースケール画像では、各ピクセルが256段階の異なる値を持つのに対し、バイナリ画像では2つの値しか存在しません。このシンプルさゆえに、バイナリ画像はさまざまな用途で活用されています。例えば、モルフォロジー変換(形態学的処理)ではバイナリ画像が必要であり、背景から物体の形状を抽出する処理にもバイナリ画像が用いられます。OpenCVを使用す