-
Количество публикаций
3 873 -
Зарегистрирован
-
Посещение
-
Days Won
346
Сообщения, опубликованные пользователем Smorodov
-
-
Если вы не против я буду писать сюда небольшие отчеты о продвижении.Думаю всем это будет интересно.
Для скорости надо поставить IPP, если еще не установлены, с ними заметно быстрее работает. У меня кадров 15-20 дает на Athlon64x2 5000 (вэбка примерно 350х280 пикселей). На Вашей же картинке (вэбкой с экрана) все отлично. Кстати, в каком разрешении работаете? Может после считывания изображения уменьшать его, до разумных размеров?
IPP существенно (в разы) ускоряющая работу OpenCV хреновина берется с сайта Intel.Ставим интелловский компилятор Intel C Plus Plus Compiler v10.1.025
Google рулит.
IPP ставится после установки компилятора. И использует его лицензию smile.gif
Подключается автоматически, нужно только указать в системной переменной Path путь к директории, /bin библиотеки IPP, в самой программе ничего отдельно указывать не нужно.
-
Спасибо за ответ. Всё попробую, может получится. Вот просматривал примеры, которые устанавливаются в месте с OpeCV, и наткнулся на пример демонстрирующий работу SURF Speeded Up Robust Features алгоритма (название примера find_obj). Этот алгоритм очень хорошо работает, вот только не уверен можно ли его использовать для работы с камерой. Если всё таки можно то рамки могут выглядеть так. Кстати он определяет и перевернутые объекты.1.
2.
Все примеры могут работать с камерой (некоторые после незначительной переделки), главное там функция обработки изображения, а как Вы его получили дело Ваше. Кстати, по моему на основе этого примера и была сделана программка из этой темы http://www.compvision.ru/forum/index.php?showtopic=11
-
Приятный текст, ваш? Почему не в вики?Спасибо
Это мой перевод куска иностранного текста с небольшими коррективами. Не в вики потому что пока руки не дошли, а в pdf потому что кроссплатформенно и просто создать из word-а
-
Здравствуйте Меня очень заинтересовал , описанный метод Мне кажется это прорыв в алгоритмах сжатия данныхА можно ли посмотреть на работу алгоритма , какоенить консольное тестовое приложени е ??? Или сравнение на стандартных последовательностях ?
Спасибо
Программа, использующая описанный метод здесь: http://www.compvision.ru/forum/index.php?showtopic=74
-
Делаю первые шаги в CV и стоит вопрос, какую камеру приобрести.В предыдущем топике поднималась эта тема, но там с темы соскочили.
Поэтому опять ее поднимаю. Хотелось бы, приобрести камеру не только
для обучения, но и в дальнейшем чтобы она была полезна в работе. Я понимаю,
что покупать железо надо для целевого назначения. Но я пока в поисках той области,
где буду работать. Поэтому хотелось бы найти ту "золотую серединку", хотя бы по критерию
цена-качество (до $100). Что можете посоветовать.
Можно посмотреть что то на подобии Logitech Webcam Pro 9000 (100 $).
Предел цены конечно, но Цейсовская оптика и разрешение 1600X1200, USB 2.0 думаю что должно хватить для большинства задач.
Пример захваченного кадра можно посмотреть тут (с наведенной мышью - это для другой камеры): http://ghonis2.ho8.com/Pro9000a.html
там её для самодельного телескопа применяют.
-
> float D[] = {1, 2, 1};Да если поставить эти коэф-ты, то будет что-то меняться, но у меня они дробные.
На всякий случай перевел все на 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);
}
Вообще-то разница (правое немного размыто) есть:
-
Линк у меня не работает, можно повторить.Вот:
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);
}
-
Спасибо за инфу, помоему это единственный форум, где я нашел единомышленников.С градусными коэффициентами с Вашего проекта у меня все работает (в книге это предыдущее задание).
У меня большие сомнения в моих исходных коэф-тах - [(1/16, 2/16, 1/16), (2/16, 4/16, 2/16), (1/16, 2/16, 1/16)] и
(1/4, 2/4, 1/4). Я их тупо впихиваю в матрицу. Интуиция мне подсказывает здесь необходима дополнительная
обработка, ведь не зря они написали "Separable kernels".
Вот здесь статейка о разделяемых ядрах. Насколько я понял, разделяемым называется двумерное ядро свертки, которое можно представить в виде матричного произведения одномерных ядер.
Из этого следует, что применение двумерного ядра эквивалентно последовательному применению к изображению одномерных ядер, являющихся множителями на которые раскладывается исходная матрица.
То есть, я предполагаю (считать лень), что квадратная матрица [(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Д ядер свертки результат должен быть одинаковый.
-
Недавно столкнулся с такой задачей, поиск прямоугольной рамки на фотографии. Что важно это определить её углы и узнать какой это именно угол. Рамка может быть так же затемнена и на неё можно смотреть под разными углами, т.е. на некоторых изображениях она может выглядеть как ромб.Я знаю точно, что эту задачу можно решить с помощью OpenCV, я уже начал с ней разбираться. Но хотелось бы узнать в каком направлении нужно работать, что бы это сделать и подходит ли представленный рисунок для этого? До этого положение центров цветных прямоугольников я находил по их центрам масс, но при этом не учитывал вероятности принодлежности точек к ним. Для очень контрастных изображений результат был довольно хороший, а вот для фотографий всё сложнее.
Примерный вид рамки:
Может что то типа программы для калибровки камеры подойдет + раскраска угловых клеток. Pамку взять в виде цветной шахматной доски, там как раз и матрица поворота возвращается.
Вообще, насчет ориентации, можно поискать по слову Homography или Homography transform, для начала в руководстве по OpenCV.
Еще можно пример с библиотекой блобов посмотреть, когда ставишь перед камерой шахматную доску, он клетки в разные цвета красит (Количество блобов я там ограничил, поэтому все не закрасит (для выделения/фильтрации объектов по размеру подойдет)).
-
Вот проект вычисления скелета изображения (тема есть на форуме), там как раз свертка применяется и все работает, посмотрите, если будут вопросы, задавайте: http://www.compvision.ru/forum/index.php?a...=post&id=55
-
Накопал в и-нете интересный документик (к сожалению без титульного листа, поэтому автора не указываю): Компьютерная_лингвистика.pdf
-
Я вот провёл колибрацию. Мне написалось "ok". И что дальше? Скорее всего я просто не вкупаюсь в суть колибрации.. Поясните, пожалуйста.Программа показывает как калибровать камеру в других программах машинного зрения, это пример использования функций калибровки, входящих в состав библиотеки OpenCV. Она не имеет другой практической ценности, кроме демонстрационной. После успешной калибровки в окне показа видео начинает показываться исправленное изображение (как Opencv это представляет), иногда, (когда набор изображений неудачный) изображение может наоборот искривиться.
С камерой на системном уровне она ничего не делает, все изменения происходят только в программе, с изображением выводимым этой программой.
То есть это не некая системная утилита, а просто пример программирования.
ЗЫ: С программой работают так: устанавливают флажки как надо, запускают калибровку, водят шахматной доской перед камерой (программа должна распознавать доку (рисовать точки в углах)), пока калибровка не закончится, наблюдать что получится
Количество образцов - это количество изображений по которым осуществляется калибровка.
Интервал между захватом образцов - это с каким интервалом эти изображения захватываются.
Клеток по горизонтали и Клеток по вертикали - это характеристики доски которую мы показываем программе.
Значение флагов смотреть в руководстве.
-
-
Накопал в GIMP'е такой интересный эффект "постеризации" изображения (Colors->Posterise).Сразу прикинул, что это можно неплохо заюзать в удалении шумов
А какой алгоритм может быть у такой штуки?
Насколько я понимаю, это сведение цветов изображения к меньшему числу цветов..
Здесь кое что: http://en.wikipedia.org/wiki/Color_quantization
или можно например так: Voronoi seeded colour image segmentation
Можно еще много чего найти если в google набрать colour image segmentation.
Или floodfill в OpenCV только начальную точку надо указать и точность заливки, то есть какой диапазон цветов считать одним цветом.
-
Кстати, а когда работают с "бинокулярным зрением" (когда используют две и более камеры), обязательно ли нужно, чтобы эти камеры были идентичными моделями или нет? Просто я так представил человека с разными глазами.. но с другой стороны, разное зрение у глаз одного человека - бываетЛучшее изображение всегда к худшему привести можно, а дальше как обычно
-
А непосредственно захват звука что производит? OpenCV или WinAPI?WinAPI
-
Погоди, а в OpenCV даже аудиозахват есть? Фигасе.. пошёл срочно изучать эту тему!А "mmsystem.h" для чего используется? (подключено, по крайней мере ). А воспроизводить и генерировать звуки оно не умеет случаем?
mmsystem.h - это виндовый заголовок (часть winAPI), отвечающий за мультимедиа. Звуки воспроизводить он умеет тем же способом (через API). Класс нашел в инете, подробно не изучил, еще.
-
Привет!Возникла проблемка небольшая, не могу найти как в окне OpenCV нарисовать участок окружности (типа дугу ). Круги , линии, эллипсы , что там еще... полигоны, это без проблем рисуется, а вот часть окружности что то никак.
Тут все функции рисования: 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)
рисуются.
-
Поделитесь оценками в производительности =) на вашем GPU, CPU?Время обработки одного кадра:
GPU Geforce8200 (встроенный) 0.05-0.06 ms
CPU Athlon x 2 5000 примерно 10 ms
Померять можно так:
//До кода ставим:
// Создаем и запускаем таймер
unsigned int timer = 0;
cutilCheckError(cutCreateTimer(&timer));
cutilCheckError(cutStartTimer(timer));
//---------------------
// Измеряемый код
//---------------------
// После кода ставим:
// Останавливаем и освобождаем таймер
cutilCheckError(cutStopTimer(timer));
printf("Processing time: %f (ms) \n", cutGetTimerValue(timer));
cutilCheckError(cutDeleteTimer(timer));[/code] -
Все собралось и подключилось (с либами из этой темы (см. выше), часть на которые он ругался (говорил что нет dll libjasper, libjpeg, libpng и тп.) удалил).Поищу завтра как подключить их обратно, а пока вот
Вроде и без них нормально работает , картинки, во всяком случае грузит нормально.
Создание проекта ничем не отличается от Builder 6.
-
-
Там только TTS...Не очень в теме, а что еще должно быть?
Есть тут еще что то: http://mytts.forum2x2.ru/
-
Подготовительные операции (предполагается, что VC2008 уже установлен).
1) Установить комплект CUDA.
2) Установить cudavswizard2.0 (лежит здесь: http://sourceforge.net/projects/cudavswizard/)
3) Установть OpenCV (если еще не установлен)
4) Запускаем Visual Studio 2008 и создаем новый проект типа CUDAWinApp. (File->New->New project->слева выбираем CUDA-> CUDAWinApp)
5) Alt+F7 вызывается окошко свойств проекта. Выбрать конфигурацию Release. (Все конфигурации лучше настраивать по отдельности, а не выбирать AllConfigurations)
6) В этом окошке слева выбрать Linker->Input .
7) В строке с названием Additional Dependencies должно быть cudart.lib cutil32.lib cxcore.lib cv.lib highgui.lib, чего нет добавить.
8) Открыть Linker->General,список Additional Library Directories должен содержать:
$(CUDA_LIB_PATH)
$(NVSDKCUDA_ROOT)\common\lib
C:\Program Files\OpenCV\lib
9) Открываем CUDA ->General, список Additional Include Directories должен содержать:
$(CUDA_INC_PATH)
$(NVSDKCUDA_ROOT)\common\inc
C:\Program Files\OpenCV\cv\include
C:\Program Files\OpenCV\cxcore\include
C:\Program Files\OpenCV\otherlibs\highgui
10) Что за фигня, в .cu файле нет подсветки!!! (однако должно компилироваться)
11) Идем в “C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\”.
12) Создаем (если не существует) файл “usertype.dat”.
13) Открываем “ Program files (или Program Data в vista)\NVIDIA Corporation\NVIDIA CUDA SDK\doc\syntax_highlighting\visual_studio_8\usertype.dat” и копируем его содержимое в недавно созданный файл.
14) Сохраняем файл.
15) Открываем IDE и идем Tools -> Options.
16) Открываем Text Editor -> File Extension tab, задаем расширение “cu” как новый тип файлов.
17) Перезапускаем IDE, наслаждаемся .
ЗЫ: Если у кого то стоит Касперский, то для успешной компиляции его лучше временно отключить, хотя откомпилированные программы работают нормально и с включенной защитой.
Файл с проектом (перед открытием выполнить пункты 1,2,3, 11-17 по желанию): CUDAWinApp2.rar
Проект просто находит границы.
Я специально в проекте так расточительно считаю, дабы показать на что можно расчитывать при использовании графического акселератора. Причем, полученное изображение можно обрабатывать дальше средствами OpenCV.
-
Скачал программу. Распаковал. Запускаю. Выдаёт:_____________________________________
Project1.exe - Не удалось найти компонент
----------------------------------------------------
Приложению не удалось запуститься, поскольку vcl60.bpl не был найден. Повторная установка приложения может исправить эту проблему.
_____________________________________
Как исправить?
Не работает, так как рассчитано на то, что Builder 6 установлен (это его библиотеки).
Можно скачать отсюда и бросить в папку с программой: http://smorodov.narod.ru/Downloads/Libs.zip
Если чего не хватит, можно в инете найти и в папку с программой бросить.
Загрузка изображений из файла
в OpenCV
Опубликовано · Report reply
Подробнее о работе с видео можно посмотреть здесь: http://www.compvision.ru/forum/index.php?showtopic=106