OpenCVでカメラを使う時の標準プログラム(C++用)

Last-modified: 2011-03-16 (水) 16:52:00

目次


today: ?
yesterday: ?
total: ?

更新履歴

2011/03/16

  • プログラム公開

推奨環境

  • OS: Linux(Ubuntu 10.10で確認)
  • OpenCV: 2.2
  • ショボイC++を読める広い心

このプログラムでできること

  • USBカメラから画像の取得と表示(できない場合は画像を読み込んで表示)
  • 処理時間の計測
  • 計測した処理時間の保存

ファイル構成と簡単な説明

  • ReadmeMain.txt: 更新履歴はここ
  • data/
    • data/init/: 設定ファイルを置く場所
      • data/init/webcamInit.dat
    • data/Makefile
    • data/time: 測定時間を置く場所
    • data/image: 画像を置く場所
      • data/image/lena.jpg
      • data/output/: 端末出力結果を置く場所
  • include/: ライブラリ関係のリンクはここ
    • include/Makefile
    • include/myCV.h
  • lib/: ライブラリ関係はここ
  • src/
    • src/Readmesrc.txt: 簡単なリファレンスマニュアル
    • src/Makefile
    • src/main.c
    • src/myclass.hpp
    • src/help.hpp
    • src/getTime.hpp
    • src/writer.hpp

ダウンロード用ファイル

  • Readme
  • All

main関数の流れ

/*><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
  $Id: main.cpp 2011/03/16 02:04:08 kato Exp $

  USBカメラから画像を取得するだけのプログラム.
  カメラを検出できなかった場合は画像を読み込み表示する.
  ><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><*/
#include
#include
#include
#include

using namespace std;
using namespace cv;

const string prgName = "standardCPP";
const string prgYMD  = "2011/03/16";
const string prgVer  = "0.03";

int standard(const string filename);

int main(int argc, char **argv){
    const string filename = argc == 2 ? argv[1] : "../data/image/lena.jpg";
    Help help;
    if(help.check(argc, argv))
	help.view(prgName, prgYMD, prgVer);
    standard(filename);
    return 0;
}

int standard(const string filename){
    Timer initTM, camTM, viewTM;
    initTM.start();

    VideoCapture cap(0);
    namedWindow("test",1);
    if(!cap.isOpened()){
	Mat img = imread(filename, CV_LOAD_IMAGE_COLOR);
	imshow("test", img);
	waitKey(1000);
        return 0;
    }

    initTM.finish();
    while(1){
	camTM.start();
	Mat frame;
        cap >> frame;
	viewTM.start();
	imshow("test", frame);
	viewTM.finish();
	camTM.finish();
        if(waitKey(30) >= 0)
	    break;
    }

    Writer write;
    write.input(initTM.write());
    write.input(camTM.write());
    write.input(viewTM.write());
    cout << write.output("test") << endl;
    return 0;
}