2008. 10. 3. 21:47

외곽 추출을 위한 그레이화 수정2



IplImage* changecolor(IplImage* img2)
{
 
  unsigned char r, g, b, gray ;

  for(int i=0; i<img2->height-1; i++){
  for(int j=0; j<img2->width-1; j++){
   
       Map2[i][j].r = img2->imageData[i*img2->widthStep + j*img2->nChannels + 2];
       Map2[i][j].g = img2->imageData[i*img2->widthStep + j*img2->nChannels + 1];
       Map2[i][j].b = img2->imageData[i*img2->widthStep + j*img2->nChannels + 0];

                gray=255;
    r = Map2[i][j].r;
       g = Map2[i][j].g;
          b = Map2[i][j].b;

     //    if(r>80 && g<r && b<r){        // 빨강
    if(r>=100 && g<=140 && b<=140 || r>=100 && b>=100 && g<=130 || r<=240 && g<=150 && b<=90 && (b+60)<=g || r>=51 && g<=20 && b>=51){
     gray=155;
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 0] = (char)gray; // Blue
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 1] = (char)gray; // Green
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 2] = (char)gray; // Red
                 }

                if(r>=50 && g>=50 && b>=50){
                    gray=155;
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 0] = (char)gray; // Blue
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 1] = (char)gray; // Green
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 2] = (char)gray; // Red

    }
    if(gray==255){
     if(r<=50 && g>=51 && b>=51 || r>=51 && g>=51 && b<=50 || r<=50 && g>=51 && b<=50){
        gray=155;
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 0] = (char)gray; // Blue
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 1] = (char)gray; // Green
        img2->imageData[i*img2->widthStep + j*img2->nChannels + 2] = (char)gray; // Red   

     }else if(gray==255){
      CString qwq;
      qwq.Format("%d %d %d",r,g,b);
    //  AfxMessageBox(qwq);
     }
    
    }
   }
  }
 return img2;
}

 

 

 

거의 대부분의 노이즈가 제거 되었다..