とにかく書く

日々の雑感や知り得たことを、とにかく書いています

はじめてのOpenCV

OpenCVは、画像処理・画像解析ライブラリ。
カメラから取得した画像を使って、なにかしてみようと思い使ってみる。



まずはインストールから。Arch Linux の場合、2016年02月24日現在はバージョンは 2.4.12.2-2が利用可能。
(最新は3.1)

$ sudo pacman -S opencv

とりあえずサンプルでコンパイルとキャプチャできるかテスト。以下のCファイルとMakefileを同一ディレクトリにおいて、

$ make
$ ./a.out

コンパイル、実行した。無事にキャプチャ画像が表示された(キーを押すとウィンドウが消えます。)

CaptureWebCamera.c

/* ======================================================================
 * CaptureWebCamera.c
 * Webカメラの画像をキャプチャして表示する
 * ====================================================================== */
#include <stdio.h>
#include <stdlib.h>
#include <highgui.h>

int main(int argc, char *argv[])
{
    CvCapture *capture;           /* キャプチャ画像 */
    const char *title = "sample"; /* ウィンドウタイトル */

    /* ウェブカメラの画像をキャプチャする */
    if (NULL == (capture = cvCreateCameraCapture(0))) {
        fprintf(stderr, "%s: cannot capture from a web camera\n", argv[0]);
        return EXIT_FAILURE;
    }

    /* sampleという名前のウィンドウを生成する */
    cvNamedWindow(title, CV_WINDOW_AUTOSIZE);

    /* キー入力待ちの間、更新し続ける */
    while (cvWaitKey(1) == -1)
    {
        IplImage *img =cvQueryFrame(capture);
        cvShowImage(title, img);
    }

    /* キャプチャ画像データ解放 */
    cvReleaseCapture(&capture);

    /* ウィンドウ削除 */
    cvDestroyWindow(title);

    return EXIT_SUCCESS;
}

Makefile

TARGET=a.out
CC=gcc
SRCS=CaptureWebCamera.c
HEADERS=$(wildcard *.h)
OBJS=$(SRCS:.c=.o)
INCLUDE=`pkg-config --cflags opencv`
LINK=`pkg-config --libs opencv`
CFLAG =  -Wall

$(TARGET): $(OBJS)
	$(CC) -o $@ $(LINK) $(OBJS)

%.o : %.c $(HEADERS)
	$(CC) $(CFLAG) $(INCLUDE) -c -o $@ $<