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



我正在调用我自己定义的函数,在该函数中,我将std::字符串作为该函数的参数进行传递。我还需要输入cv::Mat cv::imread(const cv:;String&filename,int flags=1)我不能给出cv::String的参数。

所以我需要将std::string转换为cv::string

更新:

我已经将上面描述的函数打包在一个非托管DLL中,并从C#控制台应用程序调用它,所以它给了我不好的内存分配。

我曾尝试在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:opencvsourcesmodulescoresrcalloc.cpp, line 52

所以传递给这个函数的字符串是1345270325 characters long

当我将图像路径指定为image = cv::imread("C:/path_to_images/input_image.jpg");时,它工作得很好。没有出现错误。

有人知道如何纠正吗?

根据文档,cv::String有一个以一个std::string为参数的构造函数,这意味着std::string可以隐式转换为cv::String

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

当我按照的思路写东西时,imread对我来说很好

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

相关内容

  • 没有找到相关文章

最新更新