게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
OpenCv 질문좀 드리겠습니다.!
게시물ID : programmer_5663짧은주소 복사하기
작성자 : LUminary
추천 : 0
조회수 : 707회
댓글수 : 0개
등록시간 : 2014/09/27 21:50:49
옵션
  • 본인삭제금지
항상 코딩할때마다 막혀서 질문하러와서 많이 배워가니 너무 나쁘게만 보지 말아주세요 ㅠㅠ
 
다름아니라 이번 기회에 OpenCv를 배우게 되는데요...
 
RGB 를 YCrCb 로 변환하는 것입니다.
 
나머지는 제외하고 핵심적인 부분만 긁어왔습니다.
 
void CConvertColorModel::RGB_TO_YCbCr(IplImage* img_in ,IplImage* img_Y ,IplImage* img_Cb ,IplImage* img_Cr)
{
 /*
 img_in = cvCreateImage(cvSize(img_in->width,img_in->height),8,3);
 img_Y = cvCreateImage(cvSize(img_in->width,img_in->height),8,1);
 img_Cb = cvCreateImage(cvSize(img_in->width/2,img_in->height/2),8,1);
 img_Cr = cvCreateImage(cvSize(img_in->width/2,img_in->height/2),8,1);
 */ 이런형태로 이미지를 받아옵니다.
 for(int i=0 ; i<img_in->height ; i=i+1)
 {
  for(int j=0 ; j<img_in->widthStep ;j=j+3)
  {
   unsigned char R,G,B,Y,Cb,Cr;
   //RGB 입력
   
   B = limit((unsigned char)img_in->imageData[ i*img_in->widthStep + j ]);
   G = limit((unsigned char)img_in->imageData[ i*img_in->widthStep + j+1 ]);
   R = limit((unsigned char)img_in->imageData[ i*img_in->widthStep + j+2 ]);
 
   //여기까지 칼라사진의 RGB값을 받아왔습니다.
      
   Y= 0.299*R+0.587*G+0.114*B+0;
   Cb= (-0.169)*R+(-0.331)*G+(0.5)*B+128;
   Cr= (0.5)*R+(-0.419)*G+(-0.081)*B+128;
   
   //RGB를 Y , Cb, Cr로 변환하였습니다.
   /*
   Cb = limit((unsigned char)img_in->imageData[ R*(-0.169)+G*(-0.331)+B*0.5+128 ])   ;
   Cr =  limit((unsigned char)img_in->imageData[ R*(0.5)+G*(-0.419)+B*(-0.081)+128 ])   ;  ;
   */
   
   /*Y Cb Cr Subsampling 4:2:0 (이미지 사이즈를 고려하여 subsampling이 가능하도록 변경) 
      */
  
   img_Y->imageData[i*img_Y->widthStep+(j+3)/3+2]=Y;
 

   
    //문제이는 이곳인데, 일단 Y영상까지는 무난하게 출력되었습니다. 4:2:0으로 샘플링하라하여 widthstep인 j를 2칸에 한번꼴로 샘플링하도록 하였습니다.. 사실 이게 맞는지도 의문이 가더군요.. 어찌어찌 Y영상은 잘 출력되긴하는데..
 
다음은 img_Cr 을 띄워야하는데 위에 보시면 아시겠지만 사이즈가 원래 이미지의 1/4로 줄었습니다. ㅠㅠ 여기서 떡 막히더군요.. opecv 책도 찾아가며 해봤는데 도저히 감이 안잡혀서 여기에 여쭙습니다... ㅠㅠ
 
 

   
     
  }
 }
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호