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 | バイラテラル平滑化 |