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;
}
実行中のデスクトップ画面

上記画像は、実行中のデスクトップ画面です。
左画像は入力中のリアルタイムビデオ映像で、右画像はガウシアン平滑化をほどこした出力映像です。
入力ビデオ映像
出力ビデオ映像(ガウシアン平滑化)
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 | バイラテラル平滑化 | 


