Как преобразовать std::string в CV::String в C++?

Я вызываю свою собственную определенную функцию, в которой я передаю std:: string в качестве аргумента этой функции. Мне также нужно дать ввод в cv::Mat cv::imread(const cv::String &filename, int flags=1); И я не могу привести аргументы в виде cv::String.

Поэтому мне все равно нужно конвертировать std:: string в cv:: String.

Обновить:

Я упаковал вышеописанную функцию в неуправляемую библиотеку DLL и вызываю ее из консольного приложения C#, поэтому она дает мне неправильное распределение памяти.

Я пытался привести std:: string в конструктор cv:: String, но это не сработало.

Неуправляемый код C++ (созданная DLL в Visual studio 2013)

MathFunc.h

#include <stdexcept>
using namespace std;

namespace MathFunc
 { 
   extern "C" { __declspec(dllexport) double DoSomething(std::string imgPath); }

 }

Mathfunc.cpp

#include <iostream>
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/core/cvstd.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "MathFuncDll.h"

using namespace std;
using namespace cv;

namespace MathFunc
 {
  double DoSomething(std::string imgPath)
   {
    try{
        cv::Mat image;
        image = cv::imread(imgPath);
    }catch (exception &e){
        cout << "Error Occurred"<< e.what() << endl;
    }
    return 0;
  }
}

Это ошибка, которую я получаю при использовании:

OpenCV Error: Insufficient memory (Failed to allocate 1345270332 bytes) in cv::OutOfMemoryError,
file C:\opencv\sources\modules\core\src\alloc.cpp, line 52

Таким образом, строка, переданная этой функции, имеет 1345270325 characters long

Когда я даю путь изображения как image = cv::imread("C:/path_to_images/input_image.jpg");работает нормально. Ошибка не возникает.

Кто-нибудь знает, как это исправить?

2 ответа

Решение

Согласно документу, cv::String имеет конструктор, принимающий один std::string в качестве его параметра, что означает std::string может быть неявно преобразовано в cv::String,

В чем проблема с использованием std::string прямо?

imread работает хорошо для меня, когда я пишу что-то вроде

std::string filename = "Path/to/img.jpg";
cv::Mat img = cv::imread(filename);
Другие вопросы по тегам