Перейти к содержимому
Compvision.ru
Smorodov

opencv 2.2

Recommended Posts

У меня у одного такая проблема, с 2.2?

Пытаюсь подключится к 2 вебкам:


    captures[0] = cvCreateCameraCapture(0);

    captures[1] = cvCreateCameraCapture(1);

к первой подключается ко второй нет. Хотя компилировал под 1 версию все отлично работало...

Люююдиии) помогите!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Люююдиии) помогите!

А может 1 и 2 поставить?

0 - это же вроде к любой означает.

Но это только теоретическое предположение.

У меня только 1 вэбка и 0 проблем :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А может 1 и 2 поставить?

0 - это же вроде к любой означает.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на самом деле у тебя следующая проблема:

cvCreateCameraCapture(0);

0 - это не номер камеры, ноль означает первую попавшуюся камеру.

Если тебе надо подключить конкретную камеру, тебе надо узнать домен, к которому она относится и номер камеры. Есть следующие домены

enum

{

	CV_CAP_ANY      =0,     // autodetect


	CV_CAP_MIL      =100,   // MIL proprietary drivers


	CV_CAP_VFW      =200,   // platform native

	CV_CAP_V4L      =200,

	CV_CAP_V4L2     =200,


	CV_CAP_FIREWARE =300,   // IEEE 1394 drivers

	CV_CAP_FIREWIRE =300,

	CV_CAP_IEEE1394 =300,

	CV_CAP_DC1394   =300,

	CV_CAP_CMU1394  =300,


	CV_CAP_STEREO   =400,   // TYZX proprietary drivers

	CV_CAP_TYZX     =400,

	CV_TYZX_LEFT    =400,

	CV_TYZX_RIGHT   =401,

	CV_TYZX_COLOR   =402,

	CV_TYZX_Z       =403,


	CV_CAP_QT       =500,   // QuickTime


	CV_CAP_UNICAP   =600,   // Unicap drivers


	CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)


	CV_CAP_PVAPI    =800   // PvAPI, Prosilica GigE SDK

};

номер который тебе надо туда написать состоит из домена камер + номер камеры.

На самом деле, я знаю это очень примерно и не стал морочить реализовал все через библиотеку inputVideo, там проще.

Видел информацию по этому поводу в интернете, если есть желание поищи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Друзья,

может кто-нибудь подсказать, кто сталкивался?

Вопрос по примерам (examples)

Только на днях занялся этой библиотекой и установил, прошу простить за незнание чего-то.Я взял готовый пакет OpenCV-2.2.0-win32-vs2010.exe (для верности),

пользуюсь под VS2010 express. Всякие простые примеры работают.

А вот пример из /samples - facedetect.c - нет. Ошибка: не хочет загрузить файл каскада (это операция cascade.load) - "couldn't load clssifier cascade"

Что такое? При этом прилагающийся скомпилированный пример - facedetect.exe - работает.

Как же так? Ерунда какая-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он просто не находит файл каскада. Бросьте его к запускаемому файлу (или к исходникам чтобы запускать из IDE), или укажите путь явно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он просто не находит файл каскада. Бросьте его к запускаемому файлу (или к исходникам чтобы запускать из IDE), или укажите путь явно.

звиняюсь, что не дописал подробности. я закинул свой .ехе в ту же директорию samples, что и готовые ехе (но с другим именем), включая dll - чтоб максимально упростить.

Собственно, пробовал и абсолютный путь прописывать к xml-файлам (и в параметрах командной строки, и прямо в теле).

Не может ли быть связано с кодировкой xml-файлов? они в оригинале идут в ansi, а не utf.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуйте проверить видит программа файл или нет, это можно сделать функцией fexist:

#include <sys/stat.h>


....
if(!fexist("имя_каскада.xml"))
{
print("Your file does not exist");
}
....
[/code]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Большое спасибо за подсказки. Методом потыкиваний нашел свою ошибку, она очень смешная:в Debug-режиме нужны dll библиотеки с буквой d (opencv_core220d...). В релизе - без.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите, как рассчитать IplImage.widthStep ? Считал, что widthStep = количество каналов * ширину изображения (ну как-бы логично получается)

Но, к примеру, вот у такого изображения:



IplImage *currentPartOfImage = cvCreateImage(cvSize(295, 300), 8, 3);


widthStep = 888 (а не 885)

РЕШЕНИЕ: int widthStep = width % 8 == 0 ? channelsCount * img->width : (int)((channelsCount * img->width)/8)*8+8;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все просто, widthStep должен делиться на 8.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще один глупый вопрос: хочу выделить в буфер канал изображения. Делаю так:

byte *currentBuffer = (byte *)malloc(width*height*sizeof(byte));

byte * data = img->imageData;  


byte *dst_buff = currentBuffer;

byte *src_buff = data;


for( int y=0; y<height; y++ )

{

   unsigned char* ptr = (unsigned char*) (data + y * widthStep);

 	for( int x=0; x<width; x++ )

 	{

 		*dst_buff = ptr[3*x];

 		dst_buff++;

 	}

}


Но запись происходит не правильно, причем dst_buff++ вообще не смещает указатель и запись каждый раз идет в начало (dst_buff[0]) :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

dst_buff не меняется после dst_buff++? В отладчике проверял?

А значения по адресу currentBuffer в окне Memory меняются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

dst_buff не меняется после dst_buff++? В отладчике проверял?

А значения по адресу currentBuffer в окне Memory меняются?

Проблемы была в том, что в дебаге показывалось только первое значение dst_buff, а в currentBuffer все отлично записывалось ... От чего так ?

Блин!!! Ну почему я вечно туплю! :( Может побольше шоколада надо есть? Что скажете ? Или забыть (если есть что забывать) С++ и уйти в запой ? :D

p.s. моё 100 сообщение :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

// Allocate image planes

	IplImage* r = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );

	IplImage* g = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );

	IplImage* b = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );


	// Split image onto the color planes

	cvSplit( src, r, g, b, NULL );
//указатель даже у 1-channel почему то uchar* , а не byte*

//For a single-channel byte image:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

((uchar *)(img->imageData + i*img->widthStep))[j]=111;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С вашего позволения тоже напишу тут вопрос:

Пытаюсь разобраться с программой поиска пешеходов с помощью HOG алгоритма.

Поставила VS2010 и opencv 2.2.

В файле internal.hpp есть следующий код:


#else

    namespace cv

    {

        class BlockedRange

        {

        public:

            BlockedRange() : _begin(0), _end(0), _grainsize(0) {}

            BlockedRange(int b, int e, int g=1) : _begin(, _end(e), _grainsize(g) {}

            int begin() const { return _begin; }

            int end() const { return _end; }

            int grainsize() const { return _grainsize; }


        protected:

            int _begin, _end, _grainsize;

        };


        template<typename Body> static inline

        void parallel_for( const BlockedRange& range, const Body& body )

        {

            body(range);

        }


        template<typename Iterator, typename Body> static inline

        void parallel_do( Iterator first, Iterator last, const Body& body )

        {

            for( ; first != last; ++first )

                body(*first);

        }


        class Split {};


        template<typename Body> static inline

        void parallel_reduce( const BlockedRange& range, Body& body )

        {

            body(range);

        }


        typedef std::vector<Rect> ConcurrentRectVector;

    }

#endif

[/code]




Этот кусок кода активен (т.е. условие при #else должно выполняться), но в основном файле cvhog.cpp 

[code] struct HOGInvoker { HOGInvoker( const HOGDescriptor* _hog, const Mat& _img, double _hitThreshold, Size _winStride, Size _padding, const double* _levelScale, ConcurrentRectVector* _vec ) <------------------------ { hog = _hog; img = _img; hitThreshold = _hitThreshold; winStride = _winStride; padding = _padding; levelScale = _levelScale; vec = _vec; } ...

ругается, что ConcurrentRectVector некорректно используется (С2061 - номер ошибки, строчка со стрелочкой).

Как попровить, помогите, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В версии OpenCV из SVN пример детектора выглядит по-другому. И работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нашла пример из свн, правда не уверена, что тот, который нужно он в группе gpu проектов и у меня говорит. что opencv скомпилирован без поддержки gpu и поэтому не работает?

Мне придется перекомпилировать OpenCv?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он называется peopledetect. GPU не нужно

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, нашла, действительно все работает. Правда качество распознавания (я тестирую на своем ролике) не очень высокое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×