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

Smorodov

Главные администраторы
  • Количество публикаций

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

  • Посещение

  • Days Won

    346

Все публикации пользователя Smorodov

  1. Работа с контурами

    Посмотрите пример с блобами, там моменты для каждого блоба находятся, вернее там не находятся, но библиотека блоб-анализа позволяет это делать.
  2. Работа с контурами

    Функция может искать моменты не только контуров, но и двоичных изображений: Вот из хелпа: void cvMoments(const CvArr* arr, CvMoments* moments, int binary=0) Calculates all of the moments up to the third order of a polygon or rasterized shape. Parameters: * arr – Image (1-channel or 3-channel with COI set) or polygon (CvSeq of points or a vector of points) * moments – Pointer to returned moment’s state structure * binary – (For images only) If the flag is non-zero, all of the zero pixel values are treated as zeroes, and all of the others are treated as 1’s The function cvMoments() calculates spatial and central moments up to the third order and writes them to moments. The moments may then be used then to calculate the gravity center of the shape, its area, main axises and various shape characeteristics including 7 Hu invariants. Видно, что можно скормить ему изображение, причем если кстановить последний флаг, то функция воспринимает точки с нулевым значением как точки с нулевым значением, все остальные точки воспринимаются как 1.
  3. Да, разница видимо есть, и она подробно описана начиная со страницы №5 того документа, который Вы прикрепили. (правда русский перевод немного бредовый ) Вообще документик интересный и полезный, надо будет перевести нормально.
  4. cvInvert

    В документации не указано, но думаю, что одноканальной квадратной с типом элемента CV_32F или CV_64F. Она определена так: CV_IMPL double cvInvert( const CvArr* srcarr, CvArr* dstarr, int method ) { cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr); CV_Assert( src.type() == dst.type() && src.rows == dst.cols && src.cols == dst.rows ); return cv::invert( src, dst, method == CV_CHOLESKY ? cv::DECOMP_CHOLESKY : method == CV_SVD || method == CV_SVD_SYM ? cv::DECOMP_SVD : cv::DECOMP_LU ); }
  5. Работа с контурами

    Может попробовать искать отрезки? http://www.compvision.ru/forum/index.php?showtopic=31 Ведь линии прослеживаются достаточно четко.
  6. cvCloneImage()

    Я имею ввиду что ошибка здесь, а не в клонировании: result->widthStep = img->widthStep;
  7. cvCloneImage()

    Да, поспешил. С этим все верно. Посмотрите WidthStep, все-таки, наверное он неправильный (будет меньше, т.к картинка обрезана).
  8. cvCloneImage()

    Так вроде WidthStep у нового изображения уже другой будет.
  9. Нашел еще хорошую статью по этому поводу: http://www.rusdoc.ru/articles/raspoznavani...igenface/18804/
  10. Работа с контурами

    По поводу последних двух параметров (method и offset) в руководстве говорится (может где переврал, но немного): * method – Метод аппроксимации (для всех режимов, кроме CV_LINK_RUNS, который использует свою, встроенную аппроксимацию) * CV_CHAIN_CODE - выдает контуры в цепном коде Фримана. Другие методы выдают полигонами (последовательностями вершин) * CV_CHAIN_APPROX_NONE - полигон со ВСЕМИ точками цепного кода. * CV_CHAIN_APPROX_SIMPLE - сжимает горизонтальные, вертикальные, и диагональные сегменты и оставляет только их конечные точки. * CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS - один из вариантов аппроксимирующего алгоритма Teh-Chin (не спрашивайте что это ). * CV_LINK_RUNS - использует абсолютно другой алгоритм извлечения контуров по горизонтальным сегментам единичных точек (насколько я понял, работает по сканлайнам). Используется только с CV_RETR_LIST. * offset – Смещение, смещает все точки контура на заданное расстояние. Это полезно когда контур извлекается с использованием ROI а анализ производится на полном изображении
  11. Как прикрутить OpenCV к билдеру?

    Наконец-то удалось собрать OpenCV2.0 для билдера Вот джентельменский набор: DLL2_0 : Dlls2_0.rar (в архиве с базовым проектом уже есть) Lib2_0bcb: libs2_0bcb.rar (в архиве с базовым проектом уже есть) Include2_0bcb: include2_0.rar тоже есть в архиве с проектом, но файлы надо перекинуть в директорию include в корневой директории OpenCv2.0 Базовый проект: simple2_0.rar Базовый проект (у меня путь к нему: C:\Program Files\Borland\CBuilder6\Projects\Cv2Programs\) Правки коснулись в основном шаблонов работы с матрицами. Еще поправил оператор -> для FileNode, теперь он выдает указатель на FileNode. (надеюсь ни в какие проблемы это не выльется). Вообще, тестировал еще очень мало, но изображение уже выводит, копирует и масштабирует, работает пример поиска углов, что не может не радовать.
  12. Как прикрутить OpenCV к билдеру?

    Пара проектов на Дельфи: http://gidesa.altervista.org/camshiftdemo.php
  13. Как прикрутить OpenCV к билдеру?

    О подключении версии 2.0 к билдеру Получен 1 ответ по теме - вот содержание: Пока не успел проверить, к концу недели попробую (если кто не опередит ). ==== Заменяем в строках с ошибками "Mat_" на "Mat_<_Tp>". Попробовал, проблемы с шаблонами это решает (остается много других ошибок, но они не сложно исправляются). Перспектива есть.
  14. 3d сканнер

    Переименовал тему, т.к. по-сути, это относится к построению систем трехмерного сканирования. Да, с таким изображением сложно работать. Линию можно попытаться выделить находя центр масс для каждой строки изображения (если бы не посторонние предметы в кадре), где за массу каждой точки брать интенсивность её свечения. Тогда формула такая x=Sum(I*x)/X, где X - сумма всех элементов строки. Вот здесь материальчик: http://roboforum.ru/viewtopic.php?f=35&t=6698 Нормальный (20mW за 100$ есть и мощнее) китайский лазер можно купить тут: http://www.wickedlasers.com/index.php Можно достать из пишущего DVD-рома как здесь: http://habrahabr.ru/blogs/DIY/61109/ Есть линейные лазеры, как например здесь: http://www.lap-laser.com/indallru/products...rs/default.html Есть такая инфа, может пригодится: http://www.instructables.com/id/3-D-Laser-Scanner/ вот матлабовский файл оттуда: 3dscanner.rar Есть и готовые решения: http://www.david-laserscanner.com/
  15. Неплохо бы в кадр и рамку индикатора брать. Индикатор прямоугольный (во всяком случае его форму мы знаем), зная угловые точки (можно найти в кадре). По конфигурации трапеции, в которую превратился наш прямоугольник находим преобразование к прямоугольнику с заданными размерами. Делается при помощи cvFindHomography. описание здесь. Или, если вариации наклона не сильные, просто преобразовывать масштаб к заданному размеру. Можно наверное использовать пример с калибровкой камеры. После всего этого получаем индикатор одинакового размера на который мы смотрим перпендикулярно. Дальше берем значения точек из тех мест где должны быть сегменты и узнаем какие из них включены, а какие нет. Выясняем что написано на индикаторе. PS: Можно просто перед началом работы включить все сегменты и указать (мышкой) точки для контроля цвета на каждом сегменте , но это слишком просто
  16. Работает очень просто - уменьшает изображение число раз, кратное 2, затем увеличивает при помощи линейной интерполяции, получаем вот что: Гауссова пирамида - это пирамида из изображений от большего разрешения к меньшему, а Лаплассова пирамида наоборот.
  17. Можно попробовать использовать функцию: cvTranspose(const CvArr* src, CvArr* dst) Действие ф-ции: dst(i,j) = src(j,i) . Должна ли быть матрица (изображение) квадратной или можно работать с матрицами произвольного размера не уверен, но скорее всего размер матрицы не имеет значения. Отражение можно получить ф-цией: void cvFlip(const CvArr* src, CvArr* dst=NULL, int flip_mode=0)
  18. Работа с камерами

    Просто дать указатель на буфер (если принимаем IplImage или что то совместимое с ним) как здесь: http://www.compvision.ru/forum/index.php?showtopic=121 А вообще мне кажется что Вам лучше UDP протокол использовать (если я правильно понял, что это типа Ip-телефонии будет) в билдере этим компонент NMUDP занимается.
  19. Matlab, SciLab...

    Матлаб может генерировать независимые DLL сам (делал такое, но достаточно давно), делается при помощи модуля Real-Time Workshop, достаточно легко генерирует exe-шники, запускаемые только с установленным матлабом (полно инфы в инете по ключевым словам - компиляция mex файлов) и может подключать к себе модули сгенерированные другими компиляторами (этого не делал), но вот здесь есть статейка: http://www.butovo.com/~zss/matlab/5/3.htm. Еще вот что нашел: MATLAB COM Builder дает возможность легко конвертировать алгоритмы, написанные на языке MATLAB, в COM объекты. * Обладает интуитивно понятным интерфейсом. * Создает COM-объекты, которые легко могут использованы из Visual Basic, C/C++, Microsoft Excel и других приложений, использующих технологию COM. * MATLAB приложения, оформленные в виде COM-объектов, могут распространяться свободно. По поводу взаимодействия с бесплатными мат-макетами ничего не слышал, но при наличии в них API для расширений, наверняка можно прикрутить OpenCV и к ним.
  20. Работа с контурами

    По моему все нормально, порядок цифр: e-24 до e-7 в пределах ошибки вычисления для подобных алгоритмов с типом переменных double. Попробуйте изменить форму с круга на квадрат, или еще что нибудь и посмотрите насколько меняется инварианта.
  21. Работа с контурами

    Может версия OpenCV другая? Если кусок кода покажете (с тестовой картинкой), попробую посмотреть поближе.
  22. Работа с контурами

    Рамочку вокруг кадра наверное не удалили, а она там есть .
  23. Интересная функция cvRemap

    Можно здесь посмотреть: http://www.compvision.ru/forum/index.php?showtopic=116
  24. Дилетантские вопросы

    Разве что здесь посмотреть: http://www.compvision.ru/forum/index.php?showtopic=121 и здесь: http://www.compvision.ru/forum/index.php?showtopic=78 Остальное экспериментом.
×