Posted at

[OpenCV] カメラ画像を表示(C言語)

More than 1 year has passed since last update.

#include <stdio.h>

#include <string.h>
#include <ctype.h>

#include <cv.h>
#include <highgui.h>

//#define FULL_SCREEN //フルスクリーンにする

#define CAP_WIDTH 640
#define CAP_HEIGHT 480

#define FRAME_WAIT 30

#define WIN_NAME "Capture"

//============================================================

int main(int argc, char *argv[]) {
//キャプチャ構造体
CvCapture *capture = 0;
//イメージ構造体
IplImage *frame = 0;

int inp_key;

//------------------------------

//カメラに対するキャプチャ構造体を作成。
if (argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
capture = cvCreateCameraCapture(argc == 2 ? argv[1][0] - '0' : 0);

//キャプチャサイズの設定
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, CAP_WIDTH);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, CAP_HEIGHT);

//------------------------------
// ウィンドウ作成

#ifdef FULL_SCREEN
//生成
cvNamedWindow(WIN_NAME, 0);
//フルスクリーン
cvSetWindowProperty(WIN_NAME, CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
#else
//生成
cvNamedWindow(WIN_NAME, CV_WINDOW_AUTOSIZE);
#endif

//------------------------------
//ループ

while(1)
{
// 1フレームキャプチャ
frame = cvQueryFrame(capture);

//表示
cvShowImage(WIN_NAME, frame);

//キー待ち
inp_key = cvWaitKey(FRAME_WAIT);

//入力あり?
if (inp_key >= 0) {
// [ESC] or 'Q' or 'q'
if (inp_key == 27 || inp_key == 81 || inp_key == 113) break;
}
}

//------------------------------
//後処理

//キャプチャ変数解放
cvReleaseCapture(&capture);
//ウィンドウ破棄
cvDestroyWindow(WIN_NAME);

return 0;
}