2015-11-19 2 views
1

У меня есть серая камера (НЕ ЦВЕТ), и я пытаюсь сделать изображение. Я бег на Raspbian, на Raspberry Pi 2. Я схватил какой-то код и обнажил его к минимуму и добиться определенного прогресса:Попытка рендеринга изображения из полутоновой камеры с OpenCV в C++. Помехи после нескольких кадров

#include "opencv2/opencv.hpp" 
    #include <iostream> 
    using namespace cv; 
    using namespace std; 

    int main(int, char**) 
    { 
     VideoCapture cap(0); // open the default camera 
     if(!cap.isOpened()) // check if we succeeded 
      return -1; 
     bool rtn; 
//  rtn = cap.set(CV_CAP_PROP_FRAME_WIDTH , 752); 
//  cout << "set to 752:" << rtn << endl; 
//  rtn = cap.set(CV_CAP_PROP_FRAME_HEIGHT , 480); 
//  cout << "set to 480:" << rtn << endl; 
     int count = 1; 
     Mat edges; 
     namedWindow("edges",1); 
     for(;;) 
     { 
      Mat frame; 
      cap >> frame; // get a new frame from camera 
      cout << "cols:" <<frame.cols << endl; 
      cout << "rows:" << frame.rows << endl; 
      cout << "count:" << count++ << endl; 
      cout << "Channel Count:"<< frame.channels() << endl; 
    //  cvtColor(frame, edges, CV_BGR2GRAY); 
      imshow("edges", edges); 
      if(waitKey(30) >= 0) break; 
     } 
     // the camera will be deinitialized automatically in VideoCapture destructor 
     return 0; 
    }. 

Теперь я получаю изображение в оттенках серого, но она работает только для некоторых (2-4, он меняется) кадров, а затем зависает. Интересно, что если вы подождете достаточно долго, иногда он сканирует еще несколько кадров после сообщений «select timeout».

Я попытался запустить следующее перед запуском приложения, но это не похоже, чтобы помочь:

rmmod uvcvideo 
modprobe uvcvideo nodrop=1 timeout=5000 

Кроме того, даже если я указываю разрешение камеры в качестве 720x480 (согласно спецификации камеры), он сообщает размер рамки - 640x480.

Кажется, что, когда я беру следующий код из:

cvtColor(frame, edges, CV_BGR2GRAY); 

Это работает, но это не черно-белое изображение, он зеленый. Обратите внимание, что я прокомментировал установку ширины и высоты рамки.

+0

Почему вы раскалываете матрицу с одним каналом (вы сказали, что выход камеры имеет оттенки серого)? – Miki

+0

Я пробовал использовать изображение как захваченное, но оно зеленое. – jordanthompson

+0

Если это оттенки серого, он может быть зеленым: D вы, вероятно, просто не указали это неправильно – Miki

ответ

0

Поскольку вы снимаете кадры с камеры, он захватывает кадр всякий раз, когда кадр готов, поэтому вам не нужно ждать 30 мс, достаточно только 1 мс, а также перед преобразованием кадра в серый, убедитесь, что он имеет 3 канала (как RGB или BGR).

Кстати, функция cv :: VideoCapture :: Set может не работать на некоторых устройствах или некоторых свойствах. Чтобы установить размер изображения, вы должны проверить принятые размеры вашей камеры, например, он может принимать только 320x200, 640x480, 600x800, ...

+0

30 в порядке, так как это 33 кадра в секунду, но изменение на 1 будет лучше. Однако это не объясняет, почему оно зависает. Если преобразование не было нормально, оно будет выброшено ошибка утверждения, поэтому все в порядке. – Miki

+0

Спецификация камеры 752x480 (https://www.leopardimaging.com/LI-USB30-V034.html) – jordanthompson

+0

@Nima t он все еще не отвечает на вопрос. Это должен быть комментарий, а не ответ. Если что-то неясно или вы думаете, что что-то действительно может помочь, но вы не уверены, поставьте его в комментарии. Если вам удастся ответить на вопрос, вы можете отправить ответ. – Miki

0

Оказывается, у меня есть проблема с электропитанием. Я увеличил мощность на плате pi (для этого есть настройка в /boot/config.txt), и этого было недостаточно. Я добавил разделитель мощности USB и использовал источник питания для стенда.