Open CV에 보면 Iplimage 형식과 Mat 형식이 있는데
제가 소스코드를 받은게 Mat 형식으로 되어 있는데 이 Mat 형식을 Iplimage 형식으로 바꾸고 싶어서 그러는데요
인터넷을 찾아보니 mat을 Iplimage로 바꾸는 건 단순히 mat을 Iplimage에 = 연산을 하면 된다고 하구 반대로 Iplimage를 mat형식으로 바꾸는건 Mat(Iplimage)형식으로 하면 자동변환해서 반환해 준다는데 무슨 뜻인지 자세히 모르겠습니다 ㅠ
제가 바꾸고자 하는 소스가
//카메라로 부터 영상을 수신 한다
int DRC_GetImage()
{
int Sumlen =0; // 수신 누적 길이 관리용
gCAM.TotalLen = 1000000;//카메라가 보내는 데이터의 길이를 알수는 없으나...일단 충분히 큰수로...
while(Sumlen<gCAM.TotalLen){
int TempLen = recv(hSocket,(char *)&mbuff[Sumlen], gCAM.TotalLen-Sumlen, 0 );
//무언가 수신햇다면 진입
if(TempLen>0){
//printf(" _RX:%5d ",TempLen);
//처음 수신햇다면 진입
if(Sumlen==0)
{
if(mbuff[0]!=0x55||mbuff[1]!=0x33||mbuff[2]!=0xAA){
printf("\r\nNot MATCH HEADER 0x%02X 0x%02X 0x%02X \r\n",mbuff[0],mbuff[1],mbuff[2]);
break;
}
memcpy((BYTE *)&gCAM, mbuff, sizeof(CAM_TO_PC));
//printf("good head...%d, TotalLen=%d\n",TempLen, CAM_TO_PC.TotalLen);
}
Sumlen += TempLen;
}
}
//영상을 모두 수신하면 이곳으로 ...
u8 *p = &mbuff[sizeof(CAM_TO_PC)];
if(p[0]==0xFF && p[1]==0xD8 ){
return 1;
}
else{
printf("ERROR JPEG HEADER\n");
return 0 ;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
if(DRC_InitSocket()==0) //관련 변수 초기화 및 카메라로 소켓 연결
return 0;
cvNamedWindow( "display",1); // 영상을 출력할 윈도우 생성
while(1)
{
DRC_RequestImage(); //카메라에게 영상을 요청한다
int ret = DRC_GetImage(); //카메라로 부터 영상을 수신 한다
if(ret == 0){
printf("Wrong Image\n");
continue;
}
CvMat *buf = cvCreateMat(1, IMG_W*IMG_H*2, CV_8UC1 );
memcpy((u8 *)(buf->data.ptr), &mbuff[sizeof(CAM_TO_PC)], gCAM.iJpegLen); // 수신한 영상을 복사한다
IplImage *img = cvDecodeImage(buf, 1); // 압축된 영상이므로 압축을 풀어준다
// TODO: 여기서 필요한 영상처리를 수행한다.(수신한 img영상)
cvShowImage( "display", img); // 영상을 화면에 출력함
int c = cvWaitKey(1); // 키보드 입력과 동시에 OpenCV에서 영상을 화면에 출력할 시간여유를 주어야함.
이 소스코드인데 허...엉 ㅠㅠ 어떤식으로 고쳐야 하는지 잘 모르겠네요. 혹시 아시는분은 좀 도와주세요