OpenCVのビデオ映像のガウシアン平滑化と動画保存 C++プログラミング入門 しおたに・ドット・チャイナ

006.png

HOME > OpenCVのビデオ映像のガウシアン平滑化と動画保存

OpenCVのビデオ映像のガウシアン平滑化と動画保存

OpenCVのビデオ映像のガウシアン平滑化と動画保存


// Copyright(c) 2012 shiotani.cn All Rights Reserved.
//
//前準備
//1.ファイル>新規作成>プロジェクト>VisualC++>Win32コンソールアプリケーション
//2.プロジェクト>プロパティ>構成プロパティ>全般>文字セット>設定なし
//3.プロジェクト>プロパティ>構成プロパティ>C/C++>全般>追加のインクルードディレクトリ>C:\OpenCV2.3\include
//
//デジタルビデオカメラ(USBカメラ)をPCとUSB接続する
//


#include "stdafx.h"
#include "opencv2/opencv.hpp"

#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_core231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_imgproc231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_highgui231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_calib3d231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_contrib231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_features2d231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_flann231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_gpu231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_legacy231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_ml231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_objdetect231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_ts231d.lib")
#pragma comment(lib,"C:\\OpenCV2.3\\lib\\opencv_video231d.lib")


int _tmain(int argc, _TCHAR* argv[])
{
    char* wnd_name1 ="Input";                           // 表示Window識別名の宣言
    char* wnd_name2 ="OutPut(Gaussian Smooth)";         // 表示Window識別名の宣言
    int key;

    CvCapture* src; // ビデオキャプチャ宣言
    CvVideoWriter* rec;                                 // ビデオライタ宣言
    IplImage* img_in; // 出力画像構造体宣言
    IplImage* img_out; // 出力画像構造体宣言

    cvNamedWindow(wnd_name1);                           // 表示Window作成
//    cvResizeWindow(wnd_name1, 500, 500);                // 表示Windowサイズ変更
    cvNamedWindow(wnd_name2);                           // 表示Window作成
//    cvResizeWindow(wnd_name2, 500, 500);                // 表示Windowサイズ変更

    src=cvCaptureFromCAM(0);                            // カメラ映像取得

    if(src==NULL) // ビデオカメラが見つからない時
    {
        printf("There is NOT the Video Camera.\n");
        cvWaitKey(0); // キー入力待ち
        return -1;
    }



    img_in =cvQueryFrame(src);                          // 初期フレーム取得
    img_out=cvCloneImage(img_in);                       // 出力画像領域確保(入力画像を複製)

    //ビデオファイル書込み設定
    rec=cvCreateVideoWriter("Video_Gaussian1.avi",CV_FOURCC('X','V','I','D'),30,
            cvSize(img_in->width,img_in->height)); // aviファイル
//    rec=cvCreateVideoWriter("Video_Gaussian1.swf",CV_FOURCC('F','L','V','1'),30,
            cvSize(img_in->width,img_in->height)); // FLVファイル

    while(1){
        img_in=cvQueryFrame(src);                        // 1フレーム取得

        cvSmooth(img_in,img_out,CV_GAUSSIAN,11,11,3);    // ガウシアン平滑化

        cvShowImage(wnd_name1,img_in);                   // 1フレームWindow表示
        cvShowImage(wnd_name2,img_out);                  // 1フレームWindow表示

        cvWriteFrame(rec, img_out);                      // 1フレーム書込み

        key=cvWaitKey(33);                               // キー入力待ち(33ms)
        if(key==27)break;                                // ESCキー入力で終了
    }


    cvDestroyAllWindows();                               // 表示Windowを破棄
    cvReleaseCapture(&src);                              // 画像構造体の解放
    cvReleaseVideoWriter(&rec);                          // ビデオライタの解放
    cvReleaseImage(&img_out);                            // 画像構造体の解放


    return 0;
}

実行中のデスクトップ画面
OpenCVのビデオ映像のガウシアン平滑化と動画保存

上記画像は、実行中のデスクトップ画面です。

左画像は入力中のリアルタイムビデオ映像で、右画像はガウシアン平滑化をほどこした出力映像です。

入力ビデオ映像

出力ビデオ映像(ガウシアン平滑化)

CV_FOURCCの動画コーデック
CV_FOURCC 動画コーデック
CV_FOURCC('X','V','I','D') Xvid
CV_FOURCC('F','L','V','1') FLV1
0 非圧縮
CV_FOURCC('P','I','M','1')
MPEG-1
CV_FOURCC('M','P','G','4')
MPEG-4
CV_FOURCC('M','P','4','2') MPEG-4.2
CV_FOURCC('D','I','V','3') MPEG-4.3
CV_FOURCC('D','I','V','X')  Divx
CV_FOURCC('D','X','5','0') Divx ver.5.0 
CV_FOURCC('M','J','P','G')  Motion JPG
CV_FOURCC('U','2','6','3') H.263
CV_FOURCC('I','2','6','3') H.263I
CV_FOURCC('H','2','6','3') H.264

cvSmoothの平滑化
cvSmoothの平滑化 意味
CV_GAUSSIAN ガウシアン平滑化
CV_BLUR 単純平滑化
CV_BLUR_NO_SCALE スケーリングなしの単純平滑化
CV_MEDIAN 中央値平滑化
CV_BILATERAL バイラテラル平滑化