[OpenCV 질문] BYTE 로 오는 이미지를 Iplimage로 바꾸기
[출처] BYTE 로 오는 이미지를 Iplimage로 바꾸기 (OpenCV KOREA 대한민국 최고의 컴퓨터비젼 커뮤니티) |작성자 정훈
 
 
http://cafe.naver.com/opencv/7140  
 
안녕하세요 ^^

들어와서 가끔씩 모르는거만 찾아보다가 오늘 처음 글적는게 또 질문이 되네요

다른게 아니고 현재 BYTE형식의 이미지를 받아와서 Iplimage로 변환을 하려고 하는데요. 막히네요

영상을 캡쳐해서 이미지는 BYTE value[640*480*3]으로 넘기구요. 이걸 가지고 작업을 하려고 하는데

Iplimage 형식으로 변환을 해야 작업이 진행되는데 변환할수 있는 함수나 참고 할만한게 있으면 조언좀 부탁드리겠습니다.

질문을 하면서도 횡설수설 한거 같네요 ;; 양해 부탁드립니다.

고수님들의 조언좀 부탁드려요

 작성자의 카페글 더보기

 
 김대진
2008/11/03 11:13

cvCreateImage(...);
cvSetImageDate(...);

하면 됩니다...

 정훈

자답 : Iplimage* srcImg = cvCreateImageHeader(cvSize(640, 480), IPL_DEPTH_8U, 3);
cvSetImageData(srcImg, (BYTE)BufferImg, WIDTHBYTES(640*IPL_DEPTH_8U*3));
cvFlip(srcImg, NULL, 0);
srcImg->origin = 0;
이렇게 하니 되네요 ^^ 답변 주신분 감사합니다.


네이버 opencv 카페에서 구한대로 해봤더니.. 계속 cvReleaseImage에서 에러가 났다..


밑에 참고 링크를 뒤져보니.. 이 경우엔 cvReleaseImage 대신 cvReleaseImageHeader를 써야 한단다.


예를 들어


IplImage *cloth_save = cvCreateImageHeader(cvSize(100,100),IPL_DEPTH_8U,3);

cvSetImageData(cloth_save,cimg,WIDTHBYTES(100*IPL_DEPTH_8U*3));

cvFlip(cloth_save,NULL,0);

cloth_save->origin = 0;

cvSaveImage(clothname,cloth_save);

cvReleaseImageHeader(&cloth_save);

delete[] cimg;

 


참고 :

http://opencv-users.1802565.n2.nabble.com/c-cvReleaseImage-td2415881.html



최종적으로 내가 쓴 코드..

참고로 내가 사용한 BYTE 어레이는 이미지가 순서대로 되어있고 (즉 뒤집혀서 들어온걸 보정해준 것) 이고 ,

 RGB 순서로 들어있었다..


IplImage *cloth_save = cvCreateImageHeader(cvSize(fd.wck[j],fd.hck[j]),IPL_DEPTH_8U,3);

cvSetImageData(cloth_save,fd.detected_clothRGBk[j],WIDTHBYTES(fd.wck[j]*IPL_DEPTH_8U*3));

cloth_save->widthStep = fd.wck[j]*3;

// 영상 width 가 4의 배수가 아닌 경우 제대로 되지 않아서 수정해줌..

cvSetImageData(cloth_save,fd.detected_clothRGBk[j],cloth_save->widthStep);

cvCvtColor(cloth_save,cloth_save,CV_RGB2BGR);

cvSaveImage(clothname,cloth_save);

cvReleaseImageHeader(&cloth_save);

Posted by 우주여행가
,