如何在C ++中将std :: string转换为CV :: String?

时间:2016-07-20 06:52:06

标签: .net string opencv c++-cli managed-c++

我正在调用自己定义的函数,在其中我将std :: string作为此函数的参数传递。我还需要输入 cv :: Mat cv :: imread(const cv :: String& filename,int flags = 1); 而且我不能将参数赋予cv :: String。

所以我需要将std :: string转换为cv :: String 无论如何。

更新

我在非托管DLL中打包了上述函数,并从C#Console应用程序调用它,因此它给了我糟糕的内存分配。

我试图在cv :: String构造函数中强制转换std :: string但它没有用。

非托管C ++代码(在Visual Studio 2013中创建的DLL)

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 个答案:

答案 0 :(得分:3)

根据documentcv::String有一个构造函数,其中一个std::string作为参数,这意味着std::string可以隐式转换为cv::String。< / p>

答案 1 :(得分:2)

直接使用std::string有什么问题?

当我按照

的方式写一些内容时,

imread对我来说很好

std::string filename = "Path/to/img.jpg";
cv::Mat img = cv::imread(filename);