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

AndreyDmitriev

Пользователи
  • Количество публикаций

    10
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем AndreyDmitriev


  1. Ну, так сказать, просто для информации:

    Скачал OpenCV 2.2 (причём именно для VS2010), и перекомпилировал ядро интеловским компилятором (последним Composer), навешанным на VS2005. Настройки по умолчанию.

    opencv_core успешно скомпилировалась, тесты прошли и в сухом остатке: оригинальный opencv_test_core пробежал за 01:58, а после перекомпиляции интеловским компилятором за 01:38. Мелочь, а приятно. Это уже не первый случай, когда интеловский компилятор выдаёт на гора код, работающий процентов на двадцать быстрее чем VS. Подозреваю, что можно выжать и ещё больше, если поколдовать с распараллеливанием.

    Андрей.


  2. У меня изменение ширины и высоты при помощи cvSetCaptureProperty работает. Другое дело, что оно работает немного странно. Дело в том, что при уменьшении разрешения должно расти количество картинок в секунду. Например при максимальном разрешении моя камера отдаёт только 15 картинок, а при половинном разрешении все 30. Но этого не происходит - картинка-то уменьшается, а вот скорость не растёт. Ну и не каждое разрешение можно установить, а только то, которое поддерживает камера.

    Кроме того, ширина и высота - единственные параметры, которые можно установить. Было бы здорово, если бы с помощью cvSetCaptureProperty также можно было бы установить яркость, контраст и гамму (и в библиотеке константы уже приготовлены), но чтобы это реализовать надо глубоко покопаться в исходниках (вроде как VideoInput за это отвечает).


  3. Здравствуйте, коллеги,

    Есть такая функция cvMatchTemplate. Она работает, но только если темплейт совпадает по положению с изображением:

    match.png

    Шестерёнки я могу обе найти, а вот моторчик только один. (конечно, в конкретном частном случае могу использовать cvMatchShapes, но бывают случаи когда это невозможно)

    Я хочу соорудить аналог cvMatchTemplate, но так, чтобы она была нечувствительна к повороту/масштабу/сдвигу.

    Примерно как вот здесь: http://www.lps.usp.br/~hae/software/cirateg/index.html (но там нет исходников)

    Хочу вот спросить - может быть кто-нибудь делал подобное, (прежде чем я изобрету велосипед)

    Спасибо,

    Андрей.


  4. До этого у меня стоят строчки:

    for(;contours!=0;contours = contours->h_next)

    {

    // Аппр. контуров полигонами

    result = cvApproxPoly( contours, sizeof(CvContour), storage,CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.001, 0 );

    // Площадь полигона

    double area=fabs(cvContourArea(result,CV_WHOLE_SEQ));

    А полный текст есть на форуме в примере сравнения контуров.

    Да, спасибо, пример хороший.

    Только там двумя строчками выше вот какая конструкция:

    cvFindContours( gray, storage,&contours,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0))

    ;

    //--------------

    if(contours!=0)

    {

    NumCont=contours->total; // количество найденных контуров

    }

    Если я правильно понимаю тип CvSeq, то в NumCont попадает не общее количество найденных контуров, а количество точек в первом контуре (ну, у меня во всяком случае) - я это имел ввиду.

    Андрей.


  5. ...когда я запросил contours->total он мне вывел 93 контура,хотя их там явно 4 и функция cvDrawContours

    их вполне нормально прорисовала с чем это может быть связано?

    Коллега, я так понимаю, что запросив contours->total Вы получили количество точек в первом контуре вместо количества контуров. Дальше в цикле надо обходить по всем контурам и считать сколько их всего:

    for(;contours!=0;contours = contours->h_next, contours++){...

    Четыре контура всего и получается, я даже не поленился проверить:

    Shapes.png

    Андрей.


  6. Ну исходники же открыты - можно исправить.

    P.S. Я пока с версии 1.1 не ухожу, неохота.

    Да это понятно, что можно исправить. Просто в эти дебри лезть очень не хочется, а хочется использовать уже скомпилированные библиотеки "как есть".

    Вообще обработка ошибок в OpenCV реализована довольно странно. Почему было просто не вернуть код ошибки через return? А так сдаётся мне, что я поимею кучу проблем с мультипотоковыми приложениями.

    Ладно, пошёл я CV_Assert править...

    UPD:

    Поправил CV_Assert (в первом приближении просто воткнул туда return) - вроде заработало. Завтра переброшу код ошибки через callback и всё должно взлететь.

    Странно, что компилятор Micro$oft Studio 8 (2005) не смог слинковать проект (не нашёлся vcomp.lib), а вот интеловский компилятор с задачей справился.

    Андрей.


  7. На самом деле проблема сидит вот здесь:

    error.png

    Мне этот "throw" не перехватить ничем, даже SetUnhandledExceptionFilter не может с этим справиться...

    Хорошая была библиотека, а теперь ей пользоваться практически невозможно.


  8. Доброе утро, коллеги!

    Я тут подключаю OpenCV к LabVIEW и столкнулся вот с какой проблемой: если в OpenCV возникает ошибка, то в версии 2.0 генерируется исключение, которое LabVIEW переварить не может и моментально падает. Ну например, я складываю две картинки, а они разного типа или разного размера. В версии 1.0 всё работало - я мог получить код ошибки через cvGetErrStatus (режим устанавливался SetErrMode(CV_ErrModeSilent) ). В версии 2.0 cvGetErrStatus всегда возвращает ноль. Я пробовал также подключить мою собственную calback функцию, но и это не даёт желаемого результата - всё равно генерируется исключение. Технически в моём случае OpenCV подключается через wrapper библиотеку, которая написана на чистом Си. Как в этом случае правильно обрабатывать возникающие ошибки?

    Спасибо заранее,

    Андрей Дмитриев.

×