2013-08-03 5 views
0

내 프로젝트의 일부로 내장 된 컴퓨터에서 클라이언트 응용 프로그램으로 웹 소켓을 사용하여 이미지 스트림을 보내고 스트리밍을 달성하기 위해 img 태그에 표시하려고했습니다.Opencv - png 이미지 만들기

첫 번째로 원본 RGB 데이터 (752 * 480 * 3 - 약 1MB)를 보내려고했지만 결국 엔 RGB 이미지를 기반으로 자바 스크립트로 이미지를 인코딩하는 데 문제가 발생했습니다. 내 데이터를 먼저 PNG로 보내고 웹 소켓을 사용하여 보냈습니다.

문제는 프로젝트에 이미 사용 된 OpenCV 라이브러리를 사용하여 PNG에 내 데이터를 인코딩하는 데 문제가 있습니다.

첫째, 일부 코드 :

websocketBrokerStructure.matrix = cvEncodeImage(0, websocketBrokerStructure.bgrImageToSend, 0); 
websocketBrokerStructure.imageDataLeft = websocketBrokerStructure.matrix->rows * websocketBrokerStructure.matrix->cols * websocketBrokerStructure.matrix->step; 
websocketBrokerStructure.imageDataSent = 0; 

하지만 두 번째 줄의 실행 중에 이상한 오류가 점점 오전 :

terminate called after throwing an instance of 'std::logic_error' 
what(): basic_string::_S_construct NULL not valid 

와 나는에서이 오류가있는 이유 조금 혼란 스러워요 내 암호. 나는 바로 그것을 이해한다면

또한 내가 궁금 : 호출 한 후에 cvEncodeImage (bgrImage 3 개 채널 IplImage*입니다 - BGR) 난 그냥 PNG로 인코딩 된 모든 데이터를 얻기 위해 내 CvMatdata 회원을 반복해야합니까?

답변

1

cvEncodeImage 함수는 첫 번째 매개 변수로 인코딩 할 이미지의 확장자를 사용합니다. 0을 전달하고 있는데 이는 NULL과 같습니다. 그래서 NULL not valid이라는 메시지가 나타납니다.

당신은 아마 이것을 사용한다 :

websocketBrokerStructure.matrix = cvEncodeImage(".png", websocketBrokerStructure.bgrImageToSend, 0); 

당신은 cvEncodeImagehere의 문서를 확인할 수 있습니다.

cvEncodeImage 또는 그 C++ 형제 imencode의 예는 encode_decode_test.cpp입니다. 또한 조정하려는 경우에 대비하여 cvEncodeImage에 전달할 수있는 몇 가지 매개 변수가 표시됩니다.

+0

내 부분에 아주 어리석은 실수, 그것을 알아 줘서 고마워. – Andna