2013-02-10 4 views
1

하나의 응용 프로그램을 개발 중입니다. 내 응용 프로그램에서 이미지의 특정 색상을 감지해야하는 것과 같은 요구 사항이 있습니다. 예 : 만약 내가 붉은 색을 감지하고 싶다면 나는 단지 이미지의 빨간 부분만을보아야한다. 나는 다음과 같은 방법으로이 작업을 시도했다 :이미지의 RGB 처리하기

psudocode :

우선 내가 사용하는 RGB의 형태로 이미지의 각 픽셀의 정보를 가지고있다 : 나는 다음

for(int i=0; i < width; ++i) 
{ 
    for (int j=0; j <height; j++) 
    { 
     byteIndex = (bytesPerRow * j) + i * bytesPerPixel; 

     CGFloat red = (rawData[byteIndex]  * 1.0) /255.0; 
     CGFloat green = (rawData[byteIndex + 1] * 1.0)/255.0 ; 
     CGFloat blue = (rawData[byteIndex + 2] * 1.0)/255.0 ; 
     if (red>0.9 && red<1) 
     { 
      rgba[byteIndex] =red*255; 
      rgba[byteIndex+1] =green*0 ; 
      rgba[byteIndex+2] = blue*0; 
      count++; 

     } 

    } 

} 

을 따라서이 정보를 null 파란색과 녹색 섹션이있는 다른 이미지에 할당하면 이미지의 빨간색 영역 만 볼 수 있습니다. 제대로 작동합니다.

하지만 문제는 for 루프 때문입니다. 나는 이미지의 높이와 너비에 따라 루프를 반복해야한다. 예를 들어. 이미지의 높이가 300이고 너비가 400이면 300 * 400 = 120000 번 for 루프를 반복해야합니다. 더 나은 방법이라고 생각하지 않습니다. 이렇게 효율적으로 수행 할 수있는 방법이 있습니까? 어떤 오픈 소스 라이브러리가 이것을 달성 할 수 있습니까?

+0

나는이 시도하지 않은,하지만 당신은 GPUImage을 시도하고 이미지의 RGB 값을 조정할 수 GPUImageRGBFilter 중 하나를 사용하거나 GPUImageLookupFilter과 녹색 및 청색 값을 멀리지도 할 수도 있습니다. –

+0

이것은 현재 표준에 대한 간단한 처리량이 매우 낮으며 필터링을 수행하기 위해 모든 픽셀을 방문해야하므로 작업의 복잡성 (선형)입니다. 즉, 조금 더 똑똑한 라이브러리를 사용하면 일정한 요소 만 개선 할 수 있습니다. 그러나이 외에도, 당신이 놀고있는 사소한 응용 프로그램을 제외하면 RGB의 색상 구분은 나쁜 결과를 초래할 수 있습니다. 대신 하나의 채널을 HSB 및 기타와 같은 색조에 사용하는 색상 공간을 확인해야합니다. – mmgp

답변

0

코드 최적화를 시작할 수 있습니다. 거기에 불필요한 작업과 부동/정수 변환이 많이 있습니다.

for (NSUInteger i = 0; i < width * height ; i ++) { 
    NSUInteger red = rawData[i] ; 
    if (red > 230) { 
     rawData[i+1] = 0 ; 
     rawData[i+2] = 0 ; 
    } 
} 
관련 문제