Перейти к содержимому
Compvision.ru

Recommended Posts

Добрый день!

Решил переписать алгоритм распознавания автомобильных номеров с С# на С++ (чтобы функция работала быстрее) и столкнулся с проблемой (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 нужно передавать как-то подругому. Подскажите в чем моя ошибка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Решено

ВОТ С++ проект

 

#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);

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 08.11.2016 at 16:19, Король сказал:

Решил переписать алгоритм распознавания автомобильных номеров с С# на С++ (чтобы функция работала быстрее)

Здравствуйте! У Вас получилось переписать на С++ ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если перейти на OpenCV поновее и использовать C++ API, то будет ещё быстрее. Особенно на современном железе.

Ещё можно и transparent API использовать, чтобы на видеокарту часть вычислений перенести.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Получилось частично. Выше все правильно написано. И потом работаете с Маt. Переписал проблемные участки кода, когда функция пробегает по всему изображению. Код увы не остался только библиотека. Затерялась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 26.09.2018 at 11:47, Король сказал:

Получилось частично. Выше все правильно написано. И потом работаете с Маt. Переписал проблемные участки кода, когда функция пробегает по всему изображению. Код увы не остался только библиотека. Затерялась.

Очень жаль, что не сохранился код((

Я пока так и не смог ничего по Linux реализовать((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×