2011-02-09 4 views
2

OSXの外部usbウェブカメラからビデオフィードをプログラムで分析する方法を探しています。OSXでのカメラフィードの解析

私はこのような低レベルのプログラミングをしていないので、私は現在、どこから始めなければいけないのか分かりません。

ウェブカメラのフィードにアクセスして画像データを取得してさらに処理するにはどうすればよいですか? この時点では、基本的な概念を理解しようとしており、言語固有のソリューションを探していません。 サンプルコードはいずれも高く評価されます。

誰かが正しい方向で私を指し示し、私が始めるのを助けることができたら大変感謝しています。

ありがとうございます!

トマス

答えて

1

OpenCVを使用してください。

ウェブカメラ画像を表示するためのコード例をお探しの場合は、この件に関する以前の回答を確認してください。これは、グレースケールにビデオフィードを変換し、ウィンドウ上に表示されます。

OpenCV 2.1: Runtime error

あなただけのフレームを表示したい場合は、このことにより、他のブロックを置き換える:では

else 
{ 
    cvShowImage("Colored video", color_frame); 
} 

フレームのピクセルを操作する方法を迷っている場合:

int width = color_frame->width; 
int height = color_frame->height; 
int bpp = color_frame->nChannels; 
for (int i=0; i < width*height*bpp; i+=bpp) 
{ 
    if (!(i % (width*bpp))) // print empty line for better readability 
     std::cout << std::endl; 

    std::cout << std::dec << "R:" << (int) color_frame->imageData[i] << 
          " G:" << (int) color_frame->imageData[i+1] << 
          " B:" << (int) color_frame->imageData[i+2] << " "; 
} 
+0

IはまだOpenCVの2.1(32ビット)を使用するために使用することができる優れたinterface to OpenCVあります。そのコードがOpenCVの最近のバージョンでも動作するかどうかはわかりません。 – karlphillip

+0

私が必要とした出発点だったOpenCVを私に指摘してくれてありがとう! –

+0

@トーマスあなたの質問に答えた場合、できる限り私の投稿を受け入れることを忘れないでください。 – karlphillip

1

Webカメラを使用し、ピクセルデータを操作する場合は、Video libraryProcessingを使用できます。最も簡単な方法は、IDEにバンドルされているサンプルをチェックすることです。

処理は、Javaベースのビジュアライゼーション言語で、使い方が簡単で、WIndows、MacOSX、Linuxで動作します。私は、私のMacBookの箱から出したウェブカメラのものを見つけました。

ここでは、Webカメラのフィードを読み込んでグレースケールでレンダリングするスクリプトの例(IDEにバンドルされている例に基づいています)を示します。


import processing.video.*; 

int numPixels; 
Capture video; 

void setup() { 
    // Change size to 320 x 240 if too slow at 640 x 480 
    size(640, 480, P2D); 

    video = new Capture(this, width, height, 24); 
    numPixels = video.width * video.height; 
    // Make the pixels[] array available for direct manipulation 
    loadPixels(); 
} 

void draw() { 
    if (video.available()) { 
    video.read(); // Read a new video frame 
    video.loadPixels(); // Make the pixels of video available 
    for (int i = 0; i < numPixels; i++) { // For each pixel in the video frame... 
     // Make all the pixels grey if mouse is pressed 
     if (mousePressed) { 
     float greyVal = brightness(video.pixels[i]); 
     pixels[i] = color(greyVal); 
     } else { 
     // If mouse not pressed, show normal video 
     pixels[i] = video.pixels[i]; 
     } 
    } 
    updatePixels(); // Notify that the pixels[] array has changed 
    } 
} 

また、私のMac上でエッジ検出等

+0

素晴らしい私はこの処理が好きです。それにはたくさんの例があります –