Я разработал программу на C ++, которая использует OpenCV. Теперь я хочу разработать приложение для Windows на основе форм в C #.
Поскольку C # может обрабатывать только управляемый код, практически невозможно запустить OpenCV непосредственно в приложении C #. Я искал различные способы создания приложения C # с использованием OpenCV, одним из которых является EmguCV, а другой метод, который меня гораздо больше интересует, — это импорт файла c ++ .dll в приложение C # и вызов таким образом неуправляемых функций.
Я начал с создания простых функций на С ++ и смог использовать cout
а также cin
в моем приложении C # путем импорта DLL. Проблема возникает, когда я пытаюсь включить файлы заголовков OpenCV в мое приложение C ++, и когда я компилирую, я получаю эту ошибку
ошибка LNK1104: не удается открыть файл ‘tbb_debug.lib’
Кто-то делал это раньше, но я не могу понять, как он взаимодействует с C ++ с C # в
Отображение канала веб-камеры в формате cv :: Mat в картинке
Вопрос в том, что у меня есть функция, которая принимает переменную cv :: Mat, выполняет некоторую обработку изображения и возвращает обработанную матрицу. Я хочу использовать эту функцию, написанную на C ++, в моем приложении C #. но проблема в том, что я не могу создать DLL, когда я включаю библиотеку OpenCV в C ++.
Поэтому, пожалуйста, не предлагайте мне использовать EmguCV или любые другие оболочки .NET
для OpenCV.
Я использую Visual Studio 2010 для моего проекта.
Я бы явно экспортировал методы, которые обертывают ваши точки входа в заголовок C ++, а затем использовал P / Invoke для ссылки на них:
extern "C" __declspec(dllexport) BOOL DoSomething();
Затем потребляйте их в C #:
[DllImport("MyOpenCVWrapper.dll")]
private static extern bool DoSomething();
Я бы не стал ссылаться на заголовки OpenCV.
Хотя это может быть не то, что вы ищете, я выполнил эту задачу с помощью C ++ / CLI и показал ее через сборку. Это было прямо вперед и работало довольно хорошо. Статья в блоге здесь.