Как открыть файл модели для детектора структурированных краев OpenCV в DLL для LabVIEW? - PullRequest
1 голос
/ 16 мая 2019

Я создал пример DLL-библиотеки EdgeBoxes.cpp для LabVIEW с использованием OpenCV.Я пытаюсь открыть файл модели в DLL, но все, что я получаю, это ошибка подтверждения.Я также создал ВП для морфологии, обнаружения углов, грубого преобразования, но никогда не получал подобных сообщений об ошибках.

Я пытался:

  • Каждая комбинация путей с использованием прямой или обратной косой черты.
  • Помещение каждого файла в одну и ту же папку (также в C:\).(LabVIEW VI, DLL, ModelFile)
  • Чтобы открыть его в LabVIEW сначала с помощью "Open/Create/Replace.vi"
  • Чтобы открыть извлеченный файл model.yml вместо model.yml.gz
  • Преобразование yml-файла в json, txt также не работает

В этот момент я ничего не понимаю:

string filename = "C:\model.yml.gz"
Ptr<StructuredEdgeDetection> pDollar; = createStructuredEdgeDetection(filename);

Сообщение об ошибке, которое я получаю:

Ошибка -1002 произошла в OpenCV (4.0.1-dev) C: \ OpenCV \ opencv_contrib-master \ modules \ ximgproc \ src \ structured_edge_detection.cpp: 432: ошибка: (-215: утверждениеошибка) modelFile.isOpened () в функции 'cv :: ximgproc :: StructuredEdgeDetectionImpl :: StructuredEdgeDetectionImpl'

Я не знаю, как открыть этот файл без получения этого сообщения об ошибке.Возможно ли получить доступ к файлу в вызове DLL.Нужно ли как-то открывать его в LabVIEW VI из-за проблем с разрешениями?Спасибо!

Обновление: 1

Теперь я попытался прочитать файл с помощью ifstream, и кажется, что я могу получить доступ к файлу без каких-либо проблем (код ниже).Таким образом, причина, по которой это не работает, похоже, связана с OpenCV?

std::ifstream is(filename, std::ifstream::binary);

is.seekg(0, is.end);
int length = is.tellg();
is.seekg(0, is.beg);

char * buffer = new char[length];

is.read(buffer, length);
is.close();
delete[] buffer;    // buffer contains the entire file

Обновление: 2

Теперь я попытался открыть файл как OpenCVделает после вызова:

createStructuredEdgeDetection(filename);

После этого OpenCV пытается открыть файл с помощью: См. строку 431 https://github.com/opencv/opencv_contrib/blob/master/modules/ximgproc/src/structured_edge_detection.cpp

cv::FileStorage modelFile(filename, FileStorage::READ);
if (modelFile.isOpened()) 
{ return -1; }

Почему он работает с

ifstream::binary

Должен ли я перекомпилировать файл "structd_edge_detection.cpp"?

1 Ответ

0 голосов
/ 23 мая 2019

Я решил свою проблему.Все, что вам нужно сделать, это обратить внимание, связывая только библиотеки с «d», если вы используете режим отладки в Visual Studio.Я использовал оба типа:

opencv_imgproc401d.lib, opencv_imgproc401.lib, opencv.ximg....

После изменения дополнительных зависимостей компоновщика только для библиотек отладки

opencv_imgproc401d.lib;opencv_ximgproc401d.lib;opencv_core401d.lib;

у меня все работало нормально.

...