RinOS 16 Жалоба Опубликовано April 6, 2011 У меня у одного такая проблема, с 2.2? Пытаюсь подключится к 2 вебкам: captures[0] = cvCreateCameraCapture(0); captures[1] = cvCreateCameraCapture(1); к первой подключается ко второй нет. Хотя компилировал под 1 версию все отлично работало... Люююдиии) помогите! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 6, 2011 Люююдиии) помогите! А может 1 и 2 поставить? 0 - это же вроде к любой означает. Но это только теоретическое предположение. У меня только 1 вэбка и 0 проблем Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано April 7, 2011 А может 1 и 2 поставить? 0 - это же вроде к любой означает. Пробовал... не помогло, пробовал и комбинировал с разными типами CV_CAP_ANY, CV_CAP_MIL и т.д. но не получилось... даже не знаю по чему( Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дима 0 Жалоба Опубликовано April 7, 2011 на самом деле у тебя следующая проблема: 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, там проще. Видел информацию по этому поводу в интернете, если есть желание поищи. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
jpelikan 0 Жалоба Опубликовано April 20, 2011 Друзья, может кто-нибудь подсказать, кто сталкивался? Вопрос по примерам (examples) Только на днях занялся этой библиотекой и установил, прошу простить за незнание чего-то.Я взял готовый пакет OpenCV-2.2.0-win32-vs2010.exe (для верности), пользуюсь под VS2010 express. Всякие простые примеры работают. А вот пример из /samples - facedetect.c - нет. Ошибка: не хочет загрузить файл каскада (это операция cascade.load) - "couldn't load clssifier cascade" Что такое? При этом прилагающийся скомпилированный пример - facedetect.exe - работает. Как же так? Ерунда какая-то. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 20, 2011 Он просто не находит файл каскада. Бросьте его к запускаемому файлу (или к исходникам чтобы запускать из IDE), или укажите путь явно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
jpelikan 0 Жалоба Опубликовано April 20, 2011 Он просто не находит файл каскада. Бросьте его к запускаемому файлу (или к исходникам чтобы запускать из IDE), или укажите путь явно. звиняюсь, что не дописал подробности. я закинул свой .ехе в ту же директорию samples, что и готовые ехе (но с другим именем), включая dll - чтоб максимально упростить. Собственно, пробовал и абсолютный путь прописывать к xml-файлам (и в параметрах командной строки, и прямо в теле). Не может ли быть связано с кодировкой xml-файлов? они в оригинале идут в ansi, а не utf. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 20, 2011 Попробуйте проверить видит программа файл или нет, это можно сделать функцией fexist: #include <sys/stat.h> .... if(!fexist("имя_каскада.xml")) { print("Your file does not exist"); } .... [/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
jpelikan 0 Жалоба Опубликовано April 20, 2011 Большое спасибо за подсказки. Методом потыкиваний нашел свою ошибку, она очень смешная:в Debug-режиме нужны dll библиотеки с буквой d (opencv_core220d...). В релизе - без. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TroyashkA 12 Жалоба Опубликовано April 24, 2011 Подскажите, как рассчитать 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; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 24, 2011 Все просто, widthStep должен делиться на 8. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TroyashkA 12 Жалоба Опубликовано May 19, 2011 Еще один глупый вопрос: хочу выделить в буфер канал изображения. Делаю так: 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]) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 19, 2011 dst_buff не меняется после dst_buff++? В отладчике проверял? А значения по адресу currentBuffer в окне Memory меняются? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TroyashkA 12 Жалоба Опубликовано May 19, 2011 dst_buff не меняется после dst_buff++? В отладчике проверял? А значения по адресу currentBuffer в окне Memory меняются? Проблемы была в том, что в дебаге показывалось только первое значение dst_buff, а в currentBuffer все отлично записывалось ... От чего так ? Блин!!! Ну почему я вечно туплю! Может побольше шоколада надо есть? Что скажете ? Или забыть (если есть что забывать) С++ и уйти в запой ? p.s. моё 100 сообщение Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 19, 2011 // 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; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Wildcat 2 Жалоба Опубликовано May 30, 2011 С вашего позволения тоже напишу тут вопрос: Пытаюсь разобраться с программой поиска пешеходов с помощью 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 - номер ошибки, строчка со стрелочкой). Как попровить, помогите, пожалуйста. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 30, 2011 В версии OpenCV из SVN пример детектора выглядит по-другому. И работает. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Wildcat 2 Жалоба Опубликовано May 31, 2011 Нашла пример из свн, правда не уверена, что тот, который нужно он в группе gpu проектов и у меня говорит. что opencv скомпилирован без поддержки gpu и поэтому не работает? Мне придется перекомпилировать OpenCv? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 31, 2011 Он называется peopledetect. GPU не нужно 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Wildcat 2 Жалоба Опубликовано May 31, 2011 Спасибо, нашла, действительно все работает. Правда качество распознавания (я тестирую на своем ролике) не очень высокое. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах