请查看以下opencv
代码
void ImageWriter::writeImage(Mat image)
{
number++;
String name="D:/OpenCV Final Year/Images/intruder";
name+=number;
name+=".bmp";
//imwrite("D:/OpenCV Final Year/Images/intruder.bmp",image);
imwrite(name,image);
}
在这里,我只能说imwrite()
没有写任何东西!没有错误但没有输出。如果我使用imwrite()
的评论版本,它会按预期工作。但我无法使用它,因为我需要写入多个图像,因此number
整数变量完成的名称更改非常重要。我认为问题在于name
字符串。
但是,此name
类型为C#
,因为std:string
存在冲突。
如何让这个动态名称创建成功并让imwrite()
生效?
答案 0 :(得分:1)
char[]
)StringStream
+=
答案 1 :(得分:1)
它不起作用,因为您试图将托管的.NET System :: String对象传递给期望std :: string的函数。看看这里的文档(OpenCV Documents C++ imwrite),它似乎期待一个const字符串&类型。
如果你用C#编写它,就没有办法'声明'std :: string对象。
我首先看看name.ToCharArray()是否有用。虽然这将生成托管数组,但编译器可能会计算出从托管字符数组到本机的所需转换。
在使用C ++ / CLI时,您需要将托管字符串封送为std格式:
#include <string>
using namespace std;
using namespace System;
void MarshalString (String^ s, string& os )
{
using namespace Runtime::InteropServices;
const char* chars =
(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
os = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
}
void ImageWriter::writeImage(Mat image)
{
number++;
String name="D:/OpenCV Final Year/Images/intruder";
name+=number;
name+=".bmp";
string nativeString;
MarshalString(name, nativeString);
imwrite(nativeString, image);
}