Занимаясь анализом фото и видео потоков, поиском информации на изображении невольно столкнулся с открытой библиотекой OpenCV, про которую уже не раз упоминалось на Хабре. Но проблема в том, что OpenCV реализована для C++, а я программирую на C#.
Итак, чтобы не изучать C++ в тех тонкостях, которые мне бы потребовались для использования OpenCV я решил поискать wrapper этой библиотеки написанный под C#.
Лезем в Google и буквально с первых результатов поиска находим полезные ссылки.
Самый распространенный wrapper OpenCV под C# это EmguCv.
Чуть менее известный – OpenCvDotNet.
И самый незаметный – OpenCvSharp.
// Смелые заявления о распространенности взяты из оценки количества запросов любимого браузера.
А что, собственно, можно сравнивать у врапперов одной и той же библиотеки OpenCV?
Если честно, то очень даже многое.
Например:
Обо всем коротко, но по порядку.
EmguCV, OpenCVDotNet: Вполне разумный инсталлер. Вроде бы все прекрасно и что-то куда-то поставилось, НО как только мы открывает в MSVS пример, возникает безумное количество ошибок и предупреждений о том, что ссылки на библиотеки не работают, нужные dll- файлы найти не может и т.п.
Еслируки растут правильно хочется разобраться, то прикрутить references и скопировать нужные dll в нужную папку можно. НО если есть инсталлер, почему бы не сделать это за разработчика?
Получается, что если целью установки было ознакомление со средой, то это ознакомление требует полного погружения.
OpenCvSharp: Никаких инсталлеров, качаем бинарники, кладем в папку с решением, запускаем, все работает! Не правда ли здорово?! Плюс к этому, для ознакомление, с которого, как правило, все и начинается на сайте враппера есть архив примеров, которые УЖЕ залиты в проект MSVC и достаточно нажать на кнопку Build Solution чтобы все запустить.
В этом решении примеров уже есть все нужные ссылки на библиотеки, ссылки на все изображения и в целом такой проект вызывает чувство удовлетворения.
//Таблица взята (почти) с сайта EmguCV
EmguCV: На сайте лежит полное описание всех функций, сделанное по прототипу MSDN. Много комментариев.
+ Не нужно загружать всю документацию, если нужно посмотреть какой то один пример.
— При отсутствии интернета он-лайн документация бесполезна.
OpenCVSharp: На сайте этого враппера есть ссылка на скачивание документации в двух форматах, .chm и .html
+ Один раз загрузил и постоянно используешь.
— При смене компьютера, например с домашнего на рабочий, документацию нужно либо скачивать еще раз, либо таскать с собой.
OpenCVDotNet: Документации просто нет.!!!
По понятным причинам OpenCVDotNet остается на обочине дороги. В то же самое время у EmguCV и OpenCvSharp есть как плюсы так и минусы работы. Но они оба радикально отличаются от третьего конкурента.
Выбор всегда остается за разработчиком.
Я для себя выбрал OpenCVSharp и доволен:)
P.s. Это моя первая статья на Хабре.Не судите строго. С радостью приму в дар конструктивную критику по оформлению.
Итак, чтобы не изучать C++ в тех тонкостях, которые мне бы потребовались для использования OpenCV я решил поискать wrapper этой библиотеки написанный под C#.
1. Разведка боем
Лезем в Google и буквально с первых результатов поиска находим полезные ссылки.
Самый распространенный wrapper OpenCV под C# это EmguCv.
Чуть менее известный – OpenCvDotNet.
И самый незаметный – OpenCvSharp.
// Смелые заявления о распространенности взяты из оценки количества запросов любимого браузера.
2. Сравнительный анализ
А что, собственно, можно сравнивать у врапперов одной и той же библиотеки OpenCV?
Если честно, то очень даже многое.
Например:
- Процесс установки
- Процент «обернутых» функций
- Usability документации
- Наличие примеров
- И т.д.
Обо всем коротко, но по порядку.
А) Процесс установки:
EmguCV, OpenCVDotNet: Вполне разумный инсталлер. Вроде бы все прекрасно и что-то куда-то поставилось, НО как только мы открывает в MSVS пример, возникает безумное количество ошибок и предупреждений о том, что ссылки на библиотеки не работают, нужные dll- файлы найти не может и т.п.
Если
Получается, что если целью установки было ознакомление со средой, то это ознакомление требует полного погружения.
OpenCvSharp: Никаких инсталлеров, качаем бинарники, кладем в папку с решением, запускаем, все работает! Не правда ли здорово?! Плюс к этому, для ознакомление, с которого, как правило, все и начинается на сайте враппера есть архив примеров, которые УЖЕ залиты в проект MSVC и достаточно нажать на кнопку Build Solution чтобы все запустить.
В этом решении примеров уже есть все нужные ссылки на библиотеки, ссылки на все изображения и в целом такой проект вызывает чувство удовлетворения.
Б) Процент «обернутых» функций
Name | EmguCV | OpenCvSharp | OpenCVDotNet |
Cross Platform (Mono) | YES | NO | NO |
OpenCV 2.0 | YES | YES | NO |
Machine Learning | YES | YES | NO |
Exception Handling | YES | YES | NO |
Debugger Visualizer | YES | YES | YES |
Actively Maintained | YES | YES | NO |
//Таблица взята (почти) с сайта EmguCV
В) Usability документации
EmguCV: На сайте лежит полное описание всех функций, сделанное по прототипу MSDN. Много комментариев.
+ Не нужно загружать всю документацию, если нужно посмотреть какой то один пример.
— При отсутствии интернета он-лайн документация бесполезна.
OpenCVSharp: На сайте этого враппера есть ссылка на скачивание документации в двух форматах, .chm и .html
+ Один раз загрузил и постоянно используешь.
— При смене компьютера, например с домашнего на рабочий, документацию нужно либо скачивать еще раз, либо таскать с собой.
OpenCVDotNet: Документации просто нет.!!!
3. Итоги
По понятным причинам OpenCVDotNet остается на обочине дороги. В то же самое время у EmguCV и OpenCvSharp есть как плюсы так и минусы работы. Но они оба радикально отличаются от третьего конкурента.
Выбор всегда остается за разработчиком.
Я для себя выбрал OpenCVSharp и доволен:)
P.s. Это моя первая статья на Хабре.Не судите строго. С радостью приму в дар конструктивную критику по оформлению.