Анализ подачи камеры под OSX - PullRequest
2 голосов
/ 09 февраля 2011

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

Поскольку я не занимался программированием на низком уровне, как это раньше, я сейчас немного потерян, с чего начать.

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

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

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

Thomas

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

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

Обработка - это язык визуализации на основе 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 имеется отличный интерфейс, который можно использовать для обнаружения краев и т. Д.

1 голос
/ 09 февраля 2011

Используйте 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] << " "; 
}
...