Анализ камеры под OSX

Я ищу способ программно проанализировать видеопоток с внешней веб-камеры USB под OSX.

Поскольку я никогда не занимался таким низкоуровневым программированием, прежде чем я потерялся в том, с чего начать.

Как я могу получить доступ к веб-каналу и получить данные изображения для дальнейшей обработки? На данный момент я просто пытаюсь понять основную концепцию и не ищу решения для конкретного языка. Любой образец кода будет высоко оценен.

Я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление и помочь мне начать работу.

Заранее большое спасибо!

Томас


person Thomas Schroetter    schedule 09.02.2011    source источник


Ответы (2)


Используйте OpenCV.

И проверьте мой предыдущий ответ на эту тему, если вы ищете пример кода для отображения изображений с веб-камеры. Он преобразует видеопоток в оттенки серого и отображает их в окне:

OpenCV 2.1: ошибка выполнения

Если вы просто хотите отобразить кадры, замените блок else следующим:

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] << " "; 
}
person karlphillip    schedule 09.02.2011
comment
Я до сих пор использую OpenCV 2.1 (32 бита) на своем Mac. Я не знаю, работает ли этот код с последними версиями OpenCV. - person karlphillip; 09.02.2011
comment
Большое спасибо за то, что указали мне на OpenCV, который был только отправной точкой, в которой я нуждался! - person Thomas Schroetter; 09.02.2011
comment
@ Томас Конечно. Только не забудьте принять мой пост, когда сможете, если он ответил на ваш вопрос. - person karlphillip; 09.02.2011

Для быстрого доступа к веб-камере и для обработки данных пикселей вы можете использовать Processing с Видеотека – проще всего начать с просмотра примеров, поставляемых вместе со средой IDE.

Processing — это язык визуализации на основе Java, который прост в освоении и использовании и работает в 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
  }
}

Более того, существует отличный интерфейс к OpenCV, который можно использовать для обнаружения границ и т. д.

person Brendan    schedule 09.02.2011
comment
отлично, мне нравится эта обработка. У него куча примеров - person Pujan; 10.02.2011