crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Проблемы с OpenCV
x-8973
  опции профиля:
сообщение 28.6.2013, 21:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 22.2.2013
Пользователь №: 3720

Спасибо сказали: 0 раз(а)




Репутация:   0  


Копаю проблему "компьютерного зрения". Имеется Raspberry Pi с Rspbian'ом на борту и подключенной веб-камерой. Задача: получить изображение с веб-камеры и сохранить его в виде файла на внешний носитель.
Во время копания наткнулся на библиотеку openCV, которую все расхваливали, так как кроссплатформенная, бесплатная и прочие плюшки. Решил поставить.
Как я 6 часов собирал ее из исходников, попутно поправляя всякие баги, отдельный разговор. Теперь же она тупо не хочет работать (хотя думается мне, что дело не в ней).
Итак. Написан в Qt следующий код:
main.cpp
#include <QCoreApplication>
#include <stdio.h>
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    CvCapture* capture = cvCreateCameraCapture(0);
    if (capture == NULL)
    {
        printf("[e] CAM not found");
        return 0;
    }
    assert(capture);
    double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
    double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
    printf("[i] %.0f x %.0f\n", width, height);
    IplImage* frame = 0;
    cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);
    printf("[i] press Enter for capture image and Esc for quit\n\n");
    int counter = 0;
    char filename[512];
    while(true)
    {
        frame = cvQueryFrame(capture);
        cvShowImage("capture", frame);
        char c = cvWaitKey(33);
        if (c == 27)
        {
            break;
        }
        else if (c == 13)
        {
            sprintf(filename, "Image%d.jpg", counter);
            printf("[i] capture... %s\n", filename);
            cvSaveImage(filename, frame);
            counter++;
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("capture");
    }

    return 0;
}

testVideo.pro
#-------------------------------------------------
#
# Project created by QtCreator 2013-06-28T21:14:00
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = testVideo
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui

SOURCES += main.cpp

После сборки и запуска через консоль получаем следующее:
Цитата
VIDIOC_QUERYMENU: Недопустимый аргумент
VIDIOC_QUERYMENU: Недопустимый аргумент
VIDIOC_QUERYMENU: Недопустимый аргумент
[i] 640 x 480
[i] press Enter for capture image and Esc for quit

И все. Окно с изображением не открывается, по нажатию Enter в файл ничего не сохраняется, на Esc не реагирует вообще.
Поискав ошибку в интернетах, я нашел множество советов, начиная с указания другого параметра для функции cvCreateCameraCapture(), и заканчивая пересборкой ядра. Некоторые советы не сработали, некоторые не подходят. Вопрос к знатокам: кто работал с этой библиотекой под Linux вообще и под Raspbian в частности, и что еще можно сделать для того, чтобы оно заработало?
Пы.Сы. Попытался сделать чтение картинки из файла - работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 5.7.2013, 12:14
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


можешь привести картинку, как портится изображение?
вообще, это скорее всего проблема потоков и декодеров. под дебианом вообще частенько бывают такие косяки, чаще всего косячит ffmpeg.
но на всякий случай убедись, что у тебя хватает питания на всю периферию. проверь напряжение на контрольных точках во время работы камеры. можешь попробовать установить VNC, оторвать от распберри всё, кроме камеры, и попробовать так запустить. он очень нестабильно работает, когда его нагружают девайсами. если это проблема питания, то можно купить активный USB-удлинитель, чтобы питать камеру.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- x-8973   Проблемы с OpenCV   28.6.2013, 21:13
- - Iron Bug   я не уверена, что Raspbian имеет необходимые для O...   1.7.2013, 6:37
- - x-8973   Камера вообще работает - проверено установкой moti...   1.7.2013, 7:54
- - Iron Bug   Цитата(x-8973 @ 1.7.2013, 10:54) Биб...   1.7.2013, 9:07
- - Iron Bug   да, кстати: а что мешает использовать дебиановскую...   1.7.2013, 20:51
- - Litkevich Yuriy   Цитата(Iron Bug @ 1.7.2013, 22:51) P.S. т...   1.7.2013, 21:03
- - x-8973   Цитата(Iron Bug @ 1.7.2013, 23:51) она в ...   2.7.2013, 7:28
- - Iron Bug   Цитата(x-8973 @ 2.7.2013, 10:28) Буд...   2.7.2013, 8:10
- - x-8973   Все заработало после установки библиотек libopencv...   5.7.2013, 11:21
- - Iron Bug   по описанию это больше похоже на глюк декодера или...   5.7.2013, 11:46
- - x-8973   Кадры в файл пишутся такие же "красивые...   5.7.2013, 11:57
- - Iron Bug   можешь привести картинку, как портится изображение...   5.7.2013, 12:14
- - x-8973   Картинку пока привести не могу, ибо на работе. Веч...   5.7.2013, 12:16
- - Iron Bug   Цитата(x-8973 @ 5.7.2013, 15:16) Бло...   5.7.2013, 13:26
- - x-8973   ЮСБ компа на самом деле может дать лишь 500 мА, по...   5.7.2013, 13:31
- - Iron Bug   у меня шнур от двух USB-портов - от внешнего HDD. ...   5.7.2013, 14:15
- - Litkevich Yuriy   Цитата(x-8973 @ 5.7.2013, 15:31) пос...   5.7.2013, 15:53
- - x-8973   Вот такие "веселые картинки" моя камера ...   5.7.2013, 16:05


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 14:09