Я вызываю свою собственную определенную функцию, в которой передаю std :: string в качестве аргумента этой функции. Мне также нужно указать ввод cv :: Mat cv :: imread (const cv :: String & filename, int flags = 1); И я не могу дать аргументы как cv :: String.Как преобразовать std :: string в CV :: String в C++?
Так что мне нужно конвертировать std :: string в cv :: String в любом случае.
Update:
Я упакована выше описанной функции в неуправляемый 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;
}
}
Это я S ошибка я получаю при использовании:
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");
, он отлично работает. Ошибка не возникает.
Кто-нибудь знает, как исправить это?
Попробуйте передать 'c_str()' из 'std :: string' в качестве аргумента. – Arunmu
или вы могли бы наложить его http://docs.opencv.org/3.1.0/d1/d8f/classcv_1_1String.html#a8bbd0cc5d752437758918151afd9bb82 – slawekwin
Когда вы говорите: «Я не могу давать аргументы как cv :: String». что происходит, когда вы передаете аргумент (и пусть конвертер компилятора)? Какое сообщение об ошибке вы получите. –