Я пытаюсь создать оболочку для 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.
Любая помощь будет принята.