Король 7 Report post Posted November 8, 2016 Добрый день! Решил переписать алгоритм распознавания автомобильных номеров с С# на С++ (чтобы функция работала быстрее) и столкнулся с проблемой (Opencv 2.4.10) Опишу проблему: есть описание функции на С++ в открытом доступе #pragma once #ifndef ANPR_LIBRARY #define ANPR_EXPORT __declspec(dllimport) #else #define ANPR_EXPORT __declspec(dllexport) #endif #include <opencv.hpp> #include <cv.h> using namespace cv; extern "C" { ANPR_EXPORT IplImage* __stdcall ANPR_Recognize(IplImage* image); } И эта функция экспортируется в С# проект. [DllImport("ANPR.dll")] static public extern MIplImage ANPR_Recognize( MIplImage image); И не хочет работать. Видимо параметры MIplImage нужно передавать как-то подругому. Подскажите в чем моя ошибка? Share this post Link to post Share on other sites
Король 7 Report post Posted November 8, 2016 Решено ВОТ С++ проект #pragma once #ifndef ANPR_LIBRARY #define ANPR_EXPORT __declspec(dllimport) #else #define ANPR_EXPORT __declspec(dllexport) #endif #include <opencv.hpp> #include <cv.h> using namespace cv; extern "C" { ANPR_EXPORT int __stdcall ANPR_Recognize(BYTE* a, int W, int H); } BYTE* imageOriginal; IplImage* Original; ANPR_EXPORT int __stdcall ANPR_Recognize(BYTE* a, int W, int H) { imageOriginal = a; cv::Mat newImg = Mat(cvSize(W,H),CV_8UC3, a); Mat gray ; cvtColor(newImg,gray, CV_BGR2GRAY); } А вот код С# [DllImport("ANPR.dll")] static public extern int ANPR_Recognize(IntPtr image, int W, int H); public MainForm() { InitializeComponent(); Image<Bgr, byte> image = new Image<Bgr, byte>("1.jpg"); IntPtr array = image.MIplImage.imageData; int imag1 = ANPR_Recognize(array, image.Width, image.Height); } Share this post Link to post Share on other sites
vash_sa 0 Report post Posted September 26, 2018 В 08.11.2016 at 16:19, Король сказал: Решил переписать алгоритм распознавания автомобильных номеров с С# на С++ (чтобы функция работала быстрее) Здравствуйте! У Вас получилось переписать на С++ ? Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 26, 2018 Если перейти на OpenCV поновее и использовать C++ API, то будет ещё быстрее. Особенно на современном железе. Ещё можно и transparent API использовать, чтобы на видеокарту часть вычислений перенести. Share this post Link to post Share on other sites
Король 7 Report post Posted September 26, 2018 Получилось частично. Выше все правильно написано. И потом работаете с Маt. Переписал проблемные участки кода, когда функция пробегает по всему изображению. Код увы не остался только библиотека. Затерялась. Share this post Link to post Share on other sites
vash_sa 0 Report post Posted October 1, 2018 В 26.09.2018 at 11:47, Король сказал: Получилось частично. Выше все правильно написано. И потом работаете с Маt. Переписал проблемные участки кода, когда функция пробегает по всему изображению. Код увы не остался только библиотека. Затерялась. Очень жаль, что не сохранился код(( Я пока так и не смог ничего по Linux реализовать(( Share this post Link to post Share on other sites