Как преобразовать 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);