OpenCV의 매트 이미지가 cv::imencode
을 base64 문자열로 사용하여 인코딩되는 응용 프로그램을 만들려고합니다. 이를 위해 vector<unsigned char>
을 const unsigned char*
으로 변환해야합니다.벡터 <부호없는 문자>를 const 부호없는 문자로 변환 *
어떻게하면됩니까?
vector<unsigned char> buffer;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(0);
if(!cv::imencode(".ppm", desc, buffer, compression_params)){
printf("Image encoding failed");
}
// This generates a error
string output = base64_encode(buffer.data(), buffer.size());
printf("Output: %s", output.c_str());
이
은 내가 오류입니다 :가 지금은 뭔가 잘못 어딘가 변환에서, 오류의 더 이상 생성하지 않습니다 EXC_BAD_ACCESS (code=1, address=0x2ffd7000)
업데이트; 출력은 그것을 디코딩 한 후 입력과 동일하지 않으며 대부분 A 문자로 구성됩니다. 이것은 현재 스크립트입니다
vector<unsigned char> buffer;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(1);
if(!cv::imencode(".pgm", desc, buffer, compression_params)){
printf("Image encoding failed");
}
string output = base64_encode(buffer.data(), buffer.size());
printf("Output: %s", output.c_str());
내 생각 엔 벡터 사이의 변환이 서명 숯불을에서 const 것입니다 때문에 다른 질문을해야한다고 생각하지 않습니다이 결과를 위로 놨어요; 이전에 base64_encode이 작동했습니다. 여기
const char* s = base64_encode(reinterpret_cast<const unsigned char*>(buffer.data()), buffer.size()).c_str();
base64_encode
funciton는 std::string
을 반환 :
'buffer.data로 변경해야에'(을 reinterpret_cast' ++ 11 컴파일러,'& buffer [0]') 할 수 있습니다. 또한 실제 오류 메시지를 게시하면 * 매우 도움이 될 것입니다. 그렇지 않으면 사람들은 문제가 무엇인지 추측하고 있습니다. – Cornstalks
제거 할 때이 오류가 발생합니다 :'malloc : *** 객체 오류 0x41444967 : 해제 된 포인터가 할당되지 않았습니다. '그리고'& buffer [0]'을 사용하면'EXC_BAD_ACCESS (code = 1, address = 0x2ffd7000)' – tversteeg
또한,'.c_str()'을하지 않을 것입니다 ... 그냥'string'에'string'을 할당하십시오. 'string64'가 반환 한'string64'의 메모리가 (일시적이기 때문에) 할당을하려고 할 때 해제 되었다면 놀라지 않을 것입니다. 적절한 이동 의미를 막기 때문에'.c_str()'을 호출하십시오.) – Cornstalks