AccessViolationException при создании оболочки для opencv linemod для c # - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать оболочку для opencv linemod, чтобы он мог использоваться в c #, но получил AccessViolationException.

Что я сделал: 1, Скомпилировано и установлено opencv

2, Написал оболочку c ++

3, Создал проект ac # со ссылкой на файл dll, сгенерированный на шаге 2

1, выполнил и установил opencv

Я сделал это, следуя инструкциям в официальный учебник с использованием git-bash и cmake.

2, Написал оболочку c ++

Затем я написал оболочку CLR в VS2015 в соответствии с этим учебником (шаг 1-5)

код заголовка linemod_wrapper.h

// linemod_wrapper.h

#pragma once

using namespace System;
#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/rgbd.hpp>

namespace linemod_wrapper {

    public ref class LineMODWrapper
    {
    public:
        LineMODWrapper();

        bool test();

    private:
        cv::linemod::Detector *detector;
    };
}

код cpp linemod_wrapper.cpp

#include "stdafx.h"

#include "linemod_wrapper.h"

linemod_wrapper::LineMODWrapper::LineMODWrapper()
{
    detector = cv::linemod::getDefaultLINE();
}

bool linemod_wrapper::LineMODWrapper::test()
{
    cv::Mat temp = cv::imread("F:\\temp.jpg");

    std::vector<cv::Mat> temps;
    temps.push_back(temp);
    std::string class_id = "class0";

    int template_id = this->detector->addTemplate(temps, class_id, cv::Mat());

    if (template_id == -1)
        return false;
    return true;
}

3, Создан проект ac #Также в соответствии с этим учебником (шаг 6-7) я создал очень простой проект на C #. код c #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using linemod_wrapper;

namespace VisionKing
{
    class Program
    {
        static void Main(string[] args)
        {
            LineMODWrapper linemode = new LineMODWrapper();
            if (!linemode.test())
            {
                Console.WriteLine("ERROR adding template");
                return;
            }

            Console.WriteLine("template added");
        }
    }
}

Ожидается добавление tempalte, но я продолжаю получать AccessViolationException со строкой addTemplate.

Любая помощь будет принята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...