AndreyDmitriev
-
Количество публикаций
10 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем AndreyDmitriev
-
-
У меня изменение ширины и высоты при помощи cvSetCaptureProperty работает. Другое дело, что оно работает немного странно. Дело в том, что при уменьшении разрешения должно расти количество картинок в секунду. Например при максимальном разрешении моя камера отдаёт только 15 картинок, а при половинном разрешении все 30. Но этого не происходит - картинка-то уменьшается, а вот скорость не растёт. Ну и не каждое разрешение можно установить, а только то, которое поддерживает камера.
Кроме того, ширина и высота - единственные параметры, которые можно установить. Было бы здорово, если бы с помощью cvSetCaptureProperty также можно было бы установить яркость, контраст и гамму (и в библиотеке константы уже приготовлены), но чтобы это реализовать надо глубоко покопаться в исходниках (вроде как VideoInput за это отвечает).
-
Здравствуйте, коллеги,
Есть такая функция cvMatchTemplate. Она работает, но только если темплейт совпадает по положению с изображением:
Шестерёнки я могу обе найти, а вот моторчик только один. (конечно, в конкретном частном случае могу использовать cvMatchShapes, но бывают случаи когда это невозможно)
Я хочу соорудить аналог cvMatchTemplate, но так, чтобы она была нечувствительна к повороту/масштабу/сдвигу.
Примерно как вот здесь: http://www.lps.usp.br/~hae/software/cirateg/index.html (но там нет исходников)
Хочу вот спросить - может быть кто-нибудь делал подобное, (прежде чем я изобрету велосипед)
Спасибо,
Андрей.
-
До этого у меня стоят строчки: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 попадает не общее количество найденных контуров, а количество точек в первом контуре (ну, у меня во всяком случае) - я это имел ввиду.
Андрей.
-
Блин, ошибся я, а отредактировать пост не получается...
В общем как-то так
for(nContours = 0; contours!=0; contours = contours->h_next, nContours++){...
Извиняйте за двойной пост,
Андрей.
-
...когда я запросил contours->total он мне вывел 93 контура,хотя их там явно 4 и функция cvDrawContoursих вполне нормально прорисовала с чем это может быть связано?
Коллега, я так понимаю, что запросив contours->total Вы получили количество точек в первом контуре вместо количества контуров. Дальше в цикле надо обходить по всем контурам и считать сколько их всего:
for(;contours!=0;contours = contours->h_next, contours++){...
Четыре контура всего и получается, я даже не поленился проверить:
Андрей.
-
Ну исходники же открыты - можно исправить.P.S. Я пока с версии 1.1 не ухожу, неохота.
Да это понятно, что можно исправить. Просто в эти дебри лезть очень не хочется, а хочется использовать уже скомпилированные библиотеки "как есть".
Вообще обработка ошибок в OpenCV реализована довольно странно. Почему было просто не вернуть код ошибки через return? А так сдаётся мне, что я поимею кучу проблем с мультипотоковыми приложениями.
Ладно, пошёл я CV_Assert править...
UPD:
Поправил CV_Assert (в первом приближении просто воткнул туда return) - вроде заработало. Завтра переброшу код ошибки через callback и всё должно взлететь.
Странно, что компилятор Micro$oft Studio 8 (2005) не смог слинковать проект (не нашёлся vcomp.lib), а вот интеловский компилятор с задачей справился.
Андрей.
-
На самом деле проблема сидит вот здесь:
Мне этот "throw" не перехватить ничем, даже SetUnhandledExceptionFilter не может с этим справиться...
Хорошая была библиотека, а теперь ей пользоваться практически невозможно.
-
Для иллюстрации, чтобы было понятнее, что я имею в виду:
вот этот код:
приводит вот к такому результату:
что надо сделать, чтобы получить CV_BadImageSize или CV_StsUnmatchedSizes вместо исключения?
Андрей
-
Доброе утро, коллеги!
Я тут подключаю OpenCV к LabVIEW и столкнулся вот с какой проблемой: если в OpenCV возникает ошибка, то в версии 2.0 генерируется исключение, которое LabVIEW переварить не может и моментально падает. Ну например, я складываю две картинки, а они разного типа или разного размера. В версии 1.0 всё работало - я мог получить код ошибки через cvGetErrStatus (режим устанавливался SetErrMode(CV_ErrModeSilent) ). В версии 2.0 cvGetErrStatus всегда возвращает ноль. Я пробовал также подключить мою собственную calback функцию, но и это не даёт желаемого результата - всё равно генерируется исключение. Технически в моём случае OpenCV подключается через wrapper библиотеку, которая написана на чистом Си. Как в этом случае правильно обрабатывать возникающие ошибки?
Спасибо заранее,
Андрей Дмитриев.
opencv 2.2
в OpenCV
Опубликовано · Report reply
Ну, так сказать, просто для информации:
Скачал OpenCV 2.2 (причём именно для VS2010), и перекомпилировал ядро интеловским компилятором (последним Composer), навешанным на VS2005. Настройки по умолчанию.
opencv_core успешно скомпилировалась, тесты прошли и в сухом остатке: оригинальный opencv_test_core пробежал за 01:58, а после перекомпиляции интеловским компилятором за 01:38. Мелочь, а приятно. Это уже не первый случай, когда интеловский компилятор выдаёт на гора код, работающий процентов на двадцать быстрее чем VS. Подозреваю, что можно выжать и ещё больше, если поколдовать с распараллеливанием.
Андрей.