Jump to content
Compvision.ru

Smorodov

Главные администраторы
  • Content count

    3,833
  • Joined

  • Last visited

  • Days Won

    343

Everything posted by Smorodov

  1. Можно здесь глянуть: http://nashruddin.com/an-example-on-using-...ith-opencv.html, не cvDFT но вроде работает.
  2. Большое количество деталей роботов которые можно использовать в своих разработках, выполненых в 3d (Solidworks) 3D модели деталей роботов
  3. Словари синонимов: sinonims.rar Разные приколы со словами, типа автопоэта http://www.forumklassika.ru/showthread.php?t=14398
  4. Загрузка изображений из файла. Иногда нам для экспериментов может понадобится загрузить из файла картинку, в рамках проекта по машинному зрению это делается при помощи команды IplImage* img = cvLoadImage("Имя файла"); Командой поддерживаются типы файлов: BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, и TIFF, что вполне обеспечивает большинство потребностей. После работы с изображением память необходимо очистить при помощи стандартной команды cvReleaseImage( &img ); Файл с проектом:ImageLoader.rar
  5. Загрузка изображений из файла

    Подробнее о работе с видео можно посмотреть здесь: http://www.compvision.ru/forum/index.php?showtopic=106
  6. Думаю всем это будет интересно. Для скорости надо поставить IPP, если еще не установлены, с ними заметно быстрее работает. У меня кадров 15-20 дает на Athlon64x2 5000 (вэбка примерно 350х280 пикселей). На Вашей же картинке (вэбкой с экрана) все отлично. Кстати, в каком разрешении работаете? Может после считывания изображения уменьшать его, до разумных размеров?
  7. Все примеры могут работать с камерой (некоторые после незначительной переделки), главное там функция обработки изображения, а как Вы его получили дело Ваше. Кстати, по моему на основе этого примера и была сделана программка из этой темы http://www.compvision.ru/forum/index.php?showtopic=11
  8. Детектор углов

    Детектор угловых точек изображения. Архив с проектом: CornerDetect.rar
  9. Детектор углов

    Спасибо Это мой перевод куска иностранного текста с небольшими коррективами. Не в вики потому что пока руки не дошли, а в pdf потому что кроссплатформенно и просто создать из word-а
  10. Накопал в и-нете интересный документик (к сожалению без титульного листа, поэтому автора не указываю): Компьютерная_лингвистика.pdf
  11. Собственные вектора и значения

    Программа, использующая описанный метод здесь: http://www.compvision.ru/forum/index.php?showtopic=74
  12. Можно посмотреть что то на подобии Logitech Webcam Pro 9000 (100 $). Предел цены конечно, но Цейсовская оптика и разрешение 1600X1200, USB 2.0 думаю что должно хватить для большинства задач. Пример захваченного кадра можно посмотреть тут (с наведенной мышью - это для другой камеры): http://ghonis2.ho8.com/Pro9000a.html там её для самодельного телескопа применяют.
  13. На всякий случай перевел все на float. //--------------------------------------------------------------------------- void ProcessFrame( IplImage* img ) { IplImage* rgb[3]; CvMat* rgbMat; IplImage* dst = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_32F, 3); IplImage* src = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_32F, 3); cvConvert(img,src); IplImage* dstRGB[3]; for (int i = 0; i < 3; i++) { rgb = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_32F, 1); dstRGB = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_32F, 1); } cvSplit(src, rgb[0], rgb[1], rgb[2], NULL); //across float D[] = {0.25, 0.5, 0.25}; rgbMat = cvCreateMat(1, 3, CV_32FC1); for (int x = 0; x < 3; x++) cvmSet(rgbMat, 0, x, D[x]); for ( i = 0; i < 3; i++) { cvZero(dstRGB); cvFilter2D(rgb, dstRGB, rgbMat); } cvReleaseMat(&rgbMat); //down rgbMat = cvCreateMat(3, 1, CV_32FC1); cvZero(dst); cvMerge(dstRGB[0], dstRGB[1], dstRGB[2], NULL, dst); for (int y = 0; y < 3; y++) cvmSet(rgbMat, y, 0, D[y]); for ( i = 0; i < 3; i++) { // cvZero(dstRGB); cvFilter2D(dstRGB, dstRGB, rgbMat, cvPoint(0, 1)); // è çäåñü ïîïðàâèë (÷òîáû ôèëüòðû ïîñëåäîâàòåëüíî ïðèìåíÿëèñü) } cvReleaseMat(&rgbMat); cvZero(dst); cvMerge(dstRGB[0], dstRGB[1], dstRGB[2], NULL, dst); //cvConvertScale( dst, dst,25000,0); APIDrawIpl(10,10,src,Form1->Handle); APIDrawIpl(400,10,dst,Form1->Handle); cvZero(dst); for ( i = 0; i < 3; i++) { cvReleaseImage(&rgb); cvReleaseImage(&dstRGB); } cvReleaseImage(&src); cvReleaseImage(&dst); } Вообще-то разница (правое немного размыто) есть:
  14. Вот: http://blogs.mathworks.com/steve/2006/10/0...le-convolution/ И сверху поправил. Кстати, ядро из примера, это размытие, его действие сложно заметить. Я переделал на оператор Собеля все работает. У меня посл. свертка работает (собель из статьи выше): //--------------------------------------------------------------------------- void ProcessFrame( IplImage* src ) { IplImage* rgb[3]; CvMat* rgbMat; IplImage* dst = cvCreateImage(cvSize(src->width, src->height), src->depth, 3); IplImage* dstRGB[3]; for (int i = 0; i < 3; i++) { rgb = cvCreateImage(cvSize(src->width, src->height), src->depth, 1); dstRGB = cvCreateImage(cvSize(src->width, src->height), src->depth, 1); } cvSplit(src, rgb[0], rgb[1], rgb[2], NULL); //across float D[] = {1, 2, 1}; // Первая часть ядра rgbMat = cvCreateMat(1, 3, CV_32FC1); for (int x = 0; x < 3; x++) cvmSet(rgbMat, 0, x, D[x]); for ( i = 0; i < 3; i++) { cvZero(dstRGB); cvFilter2D(rgb, dstRGB, rgbMat, cvPoint(1, 0)); } cvReleaseMat(&rgbMat); cvZero(dst); cvMerge(dstRGB[0], dstRGB[1], dstRGB[2], NULL, dst); //down rgbMat = cvCreateMat(3, 1, CV_32FC1); D[0]=-1; // Вторая часть ядра D[1]=0; D[2]=1; for (int y = 0; y < 3; y++) cvmSet(rgbMat, y, 0, D[y]); for ( i = 0; i < 3; i++) { // cvZero(dstRGB); cvFilter2D(dstRGB, dstRGB, rgbMat, cvPoint(0, 1)); // и здесь поправил (чтобы фильтры последовательно применялись) } cvReleaseMat(&rgbMat); cvZero(dst); cvMerge(dstRGB[0], dstRGB[1], dstRGB[2], NULL, dst); for ( i = 0; i < 3; i++) { cvReleaseImage(&rgb); cvReleaseImage(&dstRGB); } APIDrawIpl(10,10,src,Form1->Handle); APIDrawIpl(400,10,dst,Form1->Handle); cvReleaseImage(&dst); }
  15. Вот здесь статейка о разделяемых ядрах. Насколько я понял, разделяемым называется двумерное ядро свертки, которое можно представить в виде матричного произведения одномерных ядер. Из этого следует, что применение двумерного ядра эквивалентно последовательному применению к изображению одномерных ядер, являющихся множителями на которые раскладывается исходная матрица. То есть, я предполагаю (считать лень), что квадратная матрица [(1/16, 2/16, 1/16), (2/16, 4/16, 2/16), (1/16, 2/16, 1/16)], есть матричное произведение двух одномерных матриц строки (1/4, 2/4, 1/4) и столбца (1/4, 2/4, 1/4). И результат после применения 2Д ядра свертки, и после последовательного применения 1Д ядер свертки результат должен быть одинаковый.
  16. Может что то типа программы для калибровки камеры подойдет + раскраска угловых клеток. Pамку взять в виде цветной шахматной доски, там как раз и матрица поворота возвращается. Вообще, насчет ориентации, можно поискать по слову Homography или Homography transform, для начала в руководстве по OpenCV. Еще можно пример с библиотекой блобов посмотреть, когда ставишь перед камерой шахматную доску, он клетки в разные цвета красит (Количество блобов я там ограничил, поэтому все не закрасит (для выделения/фильтрации объектов по размеру подойдет)).
  17. Вот проект вычисления скелета изображения (тема есть на форуме), там как раз свертка применяется и все работает, посмотрите, если будут вопросы, задавайте: http://www.compvision.ru/forum/index.php?a...=post&id=55
  18. Программка калибрующая камеру

    Программа показывает как калибровать камеру в других программах машинного зрения, это пример использования функций калибровки, входящих в состав библиотеки OpenCV. Она не имеет другой практической ценности, кроме демонстрационной. После успешной калибровки в окне показа видео начинает показываться исправленное изображение (как Opencv это представляет), иногда, (когда набор изображений неудачный) изображение может наоборот искривиться. С камерой на системном уровне она ничего не делает, все изменения происходят только в программе, с изображением выводимым этой программой. То есть это не некая системная утилита, а просто пример программирования. ЗЫ: С программой работают так: устанавливают флажки как надо, запускают калибровку, водят шахматной доской перед камерой (программа должна распознавать доку (рисовать точки в углах)), пока калибровка не закончится, наблюдать что получится Количество образцов - это количество изображений по которым осуществляется калибровка. Интервал между захватом образцов - это с каким интервалом эти изображения захватываются. Клеток по горизонтали и Клеток по вертикали - это характеристики доски которую мы показываем программе. Значение флагов смотреть в руководстве.
  19. OpenCV+Audio

    Для линукса туториал по звуку здесь: http://www.equalarea.com/paul/alsa-audio.html
  20. Здесь кое что: http://en.wikipedia.org/wiki/Color_quantization или можно например так: Voronoi seeded colour image segmentation Можно еще много чего найти если в google набрать colour image segmentation. Или floodfill в OpenCV только начальную точку надо указать и точность заливки, то есть какой диапазон цветов считать одним цветом.
  21. Лучшее изображение всегда к худшему привести можно, а дальше как обычно
  22. OpenCV+Audio

    WinAPI
  23. OpenCV+Audio

    mmsystem.h - это виндовый заголовок (часть winAPI), отвечающий за мультимедиа. Звуки воспроизводить он умеет тем же способом (через API). Класс нашел в инете, подробно не изучил, еще.
  24. как нарисовать дугу?

    Тут все функции рисования: http://opencv.willowgarage.com/documentati..._functions.html Дуги у них вроде как функцией void cvEllipse(CvArr* img, CvPoint center, CvSize axes, double angle, double start_angle, double end_angle, CvScalar color, int thickness=1, int line_type=8, int shift=0) рисуются.
×