0

다음 opencv 코드 여기C#을 문자열 표준 대 : 문자열 : 통과 문자열에 문제가

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 문자열로 생각됩니다.

그러나이 nameC# 유형이며 이는 std:string이 충돌하기 때문입니다.

동적 이름 작성을 성공적으로 수행하고 imwrite()을 작동 시키려면 어떻게해야합니까?

+2

당신이 무엇을 의미합니까? [이 질문] (http://stackoverflow.com/q/1300718/1601291)은 두 유형 간의 변환을 처리합니다. – Aurelius

+0

@Aurelius : 회신이 지연되면 용서해주십시오. std : string의 경우 오류가 발생합니다. –

+0

어떤 종류의 오류가 있습니까? 컴파일 오류? 런타임 오류? 그들이 뭐라고하니? – Aurelius

답변

1

만의 생각 는 시도 유무 :

  1. 사용 char 배열을? (char[])
  2. StringStream
  3. 문자열 형식 대신 +=
1

관리되는 .NET 시스템을 통과 :: String 객체를 성병 기대되는 함수를 시도하는 때문에이 작동하지 않습니다 :끈. 여기에서 문서를 보면 (OpenCV Documents C++ imwrite)은 const 문자열 &을 기대하고있는 것으로 보입니다.

C#으로 작성하는 경우 std :: string 객체를 '선언 할 수있는 방법이 없습니다.

CharArray()가 작동하는지 확인해보기로 시작합니다. 이렇게하면 관리되는 배열이 생성되지만 컴파일러가 관리되는 char 배열에서 기본 배열로 필요한 변환을 수행 할 수도 있습니다.

당신이 표준 형식으로 관리되는 문자열을 마샬링 할 필요가 C++/CLI를 사용하는 것처럼 "`표준 : string`을 충돌"

#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); 
} 
+0

답장을 보내 주셔서 감사합니다. 나는 C++로 작성하고있다./CLI \ –