Здравствуйте !
Меня интересует ваша ветка про «компьютерное зрение». Но вот незадача. Я в программировании не особо силен, и сейчас программирую на C#. А у вас все программы на C++. Есть ли у вас примеры на C# ?
Для работы c OpenCV на C# существует несколько библиотек-обёрток:
1. EmguCv (самый распространённый вариант)
2. OpenCvDotNet
3. OpenCvSharp
Когда мне потребовалось воспользоваться функционалом OpenCV под C# я выбрал именно последнюю библиотеку — OpenCvSharp.
Нет никаких заморочек с установкой — нужно просто сбросить dll-файл библиотеки в директорию проекта(туда же необходимо сбросить и dll-ки OpenCV), прописать в проекте и всё 🙂
Огромным плюсом этой библиотеки, так же является архив с примерами использования.
В качестве наглядного примера, как можно перенести код OpenCV с С++ на OpenCvSharp рассмотрим утилиту, осуществляющую захват видео с камеры.
// // пример работы с OpenCvSharp // // подключение кадра с камеры, по нажатию на Enter - сохранение кадра в jpg-файл // // robocraft.ru // using System; using OpenCvSharp; class Program { static void Main() { Console.WriteLine("[i] Begin..."); IplImage frame = null; IplImage src = null; CvCapture capture = null; CvWindow windowCapture = new CvWindow("capture"); try { capture = new CvCapture(0); } catch { Console.WriteLine("[!] Error: cant open camera."); } if (capture!=null) { double width = capture.GetCaptureProperty(CaptureProperty.FrameWidth); double height = capture.GetCaptureProperty(CaptureProperty.FrameHeight); Console.WriteLine("[i] width: " + width); Console.WriteLine("[i] height: " + height); int counter=0; while (true) { capture.GrabFrame(); frame = capture.RetrieveFrame(); windowCapture.ShowImage(frame); int key = CvWindow.WaitKey(33); if (key == 27) // ESC { break; } else if (key == 13) //Enter { frame.SaveImage("Image"+counter+".jpg"); counter++; } } } else { Console.WriteLine("[!] Error: cant open camera."); } Console.WriteLine("[i] End."); } }
Единственная проблема с которой мне пришлось столкнуться во время моего непродолжительного знакомства с этой библиотекой стала ошибка — DllNotFoundException / TypeInitializationException. Эта проблема рассмотрена в FAQ-е к OpenCvSharp.
Первым делом скачайте себе полезную утилиту — Dependency Walker и натравите её на OpenCvSharp.dll и посмотрите каких файлов ей не хватает.
Возможно придётся установить Visual C++ 2005 Redistributable Package или Visual C++ 2008 SP1 Redistributable Package.
Так же обратите на требуемую версию OpenCV, т.к. библиотека ищет dll-ки именно той версии OpenCV для которой она была собрана.
Например, если вы скачали OpenCvSharp-2.2 , то в каталог проекта необходимо поместить файлы:
OpenCvSharp.dll opencv_core220.dll opencv_highgui220.dll opencv_imgproc220.dll opencv_video220.dll
Кстати, так же существует C#-обёртка для библиотеки videoInput:
VideoInputSharp
Ссылки
OpenCV. Сравнительный анализ оболочек под C#
http://code.google.com/p/opencvsharp/
установка OpenCvSharp в проект
OpenCvSharp FAQ
0 комментариев на «“Вопросы OpenCV — использование OpenCV под C#”»
Да, друзья, пора учить китайский…
Доброго времени суток!
Попробовал выше указанный пример и столкнулся с вышеуказанными проблемами.
Сначала просил opencv_core220.dll, добавил — затем opencv_imgproc220.dll,
добавил, но при запуске всё равно сообщение об ошибке DllNotFoundException.
Пишу в Visual Studio 2005.
Подскажите пожалуйста, как решить данную проблему!
Не знаю почему, но пока не добавил в проект ttb.dll ничего не хотело работать.
ttb.dll брал отсюда «C:\OpenCV\opencv\build\common\tbb\ia32\vc10».
решение нашел здесьcode.google.com/p/opencvsharp/issues/detail?id=106
«Не знаю почему, но пока не добавил в проект ttb.dll ничего не хотело работать.»
OpenCV в своих алгоритмах использует архитектурные особенности процессоров Intel, от этой же компании есть компилятор поддерживающий все вкусные плюшки связанные с производительностью камней от intel и библиотека тоже от них, для производительности так сказать. А вообще С++ проект требовал tbb_debug.dll
ничего удивительного — в OpenCV начиная 2.3 появилась зависимость от TBB (этот момент отмечается в статье проустановку OpenCV 2.3.1 )
Можно ли избежать переноса dll-файлов в папку bin, и каким либо образов вшить в реализуемую библиотеку на с++/cli? Т.е. чтобы я отдавал одну библиотеку mydllname.dll, а все используемые библиотеки opencv были в нее включены?
Есть ли у кого файлы
opencv_highgui220.dll
opencv_imgproc220.dll
opencv_video220.dll
?
Или быть может проект с уже подключенным opencvsharp?
Сейчас вышла интересная библиотека OpenCV.Net. Подключил ее в 13-ой студии через NuGet. Функционал тот же только под C#. например вместо cvZero( dst ), будет dst.SetZero(); Переписал на C# пример с детектором движения (исходникblog.vidikon.com/?p=55 ). Единственное в чем загвоздка, ни как не могу найти аналогичное решение для CvtPlaneToPix( mask, 0, 0, 0, dst ).