MacでOpenCVなど

なんとなくやってみた. はじめにとりあえずportからopencvをインストールする

sudo port install opencv

すると、/opt/local/includeに、opencv/* ヘッダーファイル, /opt/local/libにライブラリがインストールされる。

というわけで、とりあえずプログラムを書いてみる。。

/*
 * OpenCVTest.cpp
 */
#include <stdio.h>

int main()
{
        
    int key;
    CvCapture *capture;
    IplImage *frameImage;
    char windowName[] = "capture";
        
    if ((capture = cvCreateCameraCapture(-1)) == NULL) {
        printf("camera not found\n");
        return -1; 
    }   

    cvNamedWindow(windowName, CV_WINDOW_AUTOSIZE);
            
    while(1) {
            
        frameImage = cvQueryFrame(capture);

        cvShowImage(windowName, frameImage);

        key = cvWaitKey(1);

        if (key == 'q') 
            break;

    }   

    cvReleaseCapture(&capture);
    cvDestroyWindow(windowName);

    return 0;
}

でもってこれをコンパイルしてみる。

g++ OpenCVTest.cpp -I/opt/local/include -L/opt/local/lib -lhighgui

てな感じでやる

でもって実行する

./a.out

すると

camera not found

という表示が出てくる。 う〜むw カメラデバイスの取得に失敗しとるっぽいですね。

まぁでも動画を必要としない画像処理はなんとかできるっぽいです。カメラに関する部分はMacだと問題があるのやも

画像処理の例としては以下のようなものをやってみました@Opencv プログラミングブックを参考に

/*
 * Threshold.cpp
 */
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>

IplImage *sourceImage;
IplImage *grayImage;
IplImage *binaryImage;

char windowName[] = "Threshold";
int levels = 128;

void binarization(void) {

	cvCvtColor(sourceImage, grayImage, CV_BGR2GRAY);

	cvThreshold(grayImage, binaryImage, levels, 255, CV_THRESH_BINARY);

	cvShowImage(windowName, binaryImage);
}


void onChange(int pos) {
	binarization();
}

int main(int argc, char **argv)
{
	char trackbarName[] = "Threshold";

	sourceImage = cvLoadImage("lena.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);

	if (sourceImage == NULL) {
		printf("lena.bmp not found");
		return -1;
	}

	grayImage = cvCreateImage(cvGetSize(sourceImage), IPL_DEPTH_8U, 1);
	binaryImage = cvCreateImage(cvGetSize(sourceImage), IPL_DEPTH_8U, 1);

	cvNamedWindow(windowName);

	cvCreateTrackbar(trackbarName, windowName, &levels, 255, onChange);
	binarization();

	cvWaitKey(0);

	cvReleaseImage(&sourceImage);
	cvReleaseImage(&grayImage);
	cvReleaseImage(&binaryImage);

	cvDestroyWindow(windowName);

	return 0;
}

これを以下のようにコンパイルする。

g++ threshold.cpp -I/opt/local/include -L/opt/local/lib -lhighgui -lcv -lcxcore -o threshold

で、実行すると

./threshold

てな感じでThresholdによる画像処理ができましたとさ。似たような手法を用いるコトによってその他様々な画像処理ができると思います

...にしても動画が表示されずに口惜しい。。。 どうすればいいのやら