2011-02-09 5 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

나는 아직도 OpenCV의 2.1 (32 비트)를 사용하는 데 사용할 수있는 훌륭한 interface to OpenCV있다. OpenCV의 최신 버전에서이 코드가 여전히 작동하는지 여부는 알 수 없습니다. – karlphillip

+0

내가 필요한 OpenCV를 알려 주신 것에 대해 진심으로 감사드립니다! –

+0

@ 토마스. 귀하의 질문에 대답한다면 가능한 한 내 게시물을 수락하는 것을 잊지 마십시오. – karlphillip

1

웹캠을 사용하고 픽셀 데이터를 조작하려면 Video library과 함께 Processing을 사용할 수 있습니다. 시작하는 가장 쉬운 방법은 IDE와 함께 제공되는 예제를 확인하는 것입니다.

프로세싱은 배우기 쉽고 사용하기 쉬운 자바 기반 시각화 언어로, Windows, MacOSX 및 Linux에서 작동합니다. 내 웹캠이 내 MacBook의 상자에서 작동한다는 것을 알았습니다.

다음은 웹캠 피드를로드하고 그레이 스케일로 픽셀을 렌더링하는 예제 스크립트 (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

위대한 나는이 가공을 좋아한다. 예제가 많이있다. –