[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);