그림 판단. - 비트 맵 이 흑백 인지 아 닌 지 판단 하 는 방법.

2322 단어
이미지 쌍: 이 치 를 거 친 jpg 형식의 비트 맵 (프로필 사진)
    알고리즘 이치:
    픽 셀 마다 RGB 값 을 통 해 진행 판단 합 니 다.비트 맵 은 픽 셀 점 으로 이 루어 져 있 고 픽 셀 점 마다 RBG 값 이 있 기 때문에 RGB 값 을 통 해 그림 이 컬러 인지 아 닌 지 를 판단 할 수 있다 는 것 을 잘 알 고 있 습 니 다.
    [RGB]: R 은 빨간색 을 대표 하고 G 는 녹색 을 대표 하 며 B 는 파란색 을 대표 하 며 삼원 색 의 이 치 를 통 해 풍부 하고 다채로운 색 의 얼굴 을 형성한다.
     시작 생각:
    1. 순수한 컬러 사진 은 픽 셀 점 의 색상 이 검은색 인지 흰색 인지 판단 만 하면 되 고 비 컬러 색상 에 닿 으 면 장단 컬러 사진 이 라 고 생각 할 수 있 습 니 다.
    2. 회색 계 컬러 그림 은 회색 계 가 있 기 때문에 화소 점 이 컬러 인지 아 닌 지 를 통 해 판단 할 수 있 지만 회색 계 화소 점 의 RGB 는 특색 이 있 습 니 다. 【 R = G = B 】
     알고리즘 최적화:
    1. 순수한 컬러, 흰색 과 검은색 두 가지 색 만 있 고 흰색 RGB [R = G = B = 255], 색 이 검은색 [R = G = B = 0];
    2. 회색 계단, RGB 【 R = G = B 】;
    색 이 든 회색 이 든 모두 RGB 중 [R = G = B] 임 을 알 수 있 습 니 다.
    문제 가 발생 했 습 니 다:
    어떤 것 은 컬러 사진 이 라 고 생각 할 수 있 고 녹색 이나 빨간색 이 있 는 상황 이 존재 하 므 로 [R = G = B] 법 으로 판단 할 수 없다.
    생각
    이 사진 들 [R < > B < > G] 은 대체적으로 회색 얼굴 에 가 깝 기 때문에 R, G, B 의 차이 가 크 지 않 을 것 입 니 다. 제 테스트 를 통 해 이 [편 색 된 컬러 사진] 사진 에 화소 점 이 있 는 R, G, B 의 차 이 는 절대 최대 50 (R - G, R - B, G - B) 을 초과 하지 않 고 컬러 사진 에 있 는 R, B 를 발 명 했 습 니 다.G 차 이 는 절대 치, 최대 치 는 50 을 넘 는 픽 셀 이 존재 합 니 다.
    간단히 말하자면:
    1. [사용자 정의] 색 편향 값 Diff = Max (| R - G |, | R - B |, | G - B |);
    2. 컬러 이미지 중 가장 큰 Diff < 50;
 [P. S: 이 알고리즘 은 오차 가 있 을 수 있 습 니 다. 엄격 한 의미 에서 R = G = B, Diff = 0 이 어야 합 니 다.]
     상세 한 현실:
 
  
///
///
///

///
///
public bool isBlackWhite(string filename)
{
   Color c = new Color();

   using (Bitmap bmp = new Bitmap(filename))
   {
      //
      for (int y = 0; y < bmp.Height; y++)
      {
         for (int x = 0; x < bmp.Width; x++)
         {
            c = bmp.GetPixel(x, y);

     // Diff
            if (GetRGBDiff(c.R, c.G, c.B) > 50)
            {
               return false;
             }
          }
       }

       return true;
    }
}

 
  
public int GetRGBDiff(int r,int g,int b)
{
   // , , r-g,r-b,g-b 。
}

좋은 웹페이지 즐겨찾기