Jump to content
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 нужно передавать как-то подругому. Подскажите в чем моя ошибка?

Share this post


Link to post
Share on other sites

Решено

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

 

#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
В 08.11.2016 at 16:19, Король сказал:

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 26.09.2018 at 11:47, Король сказал:

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×