하나의 응용 프로그램을 개발 중입니다. 내 응용 프로그램에서 이미지의 특정 색상을 감지해야하는 것과 같은 요구 사항이 있습니다. 예 : 만약 내가 붉은 색을 감지하고 싶다면 나는 단지 이미지의 빨간 부분만을보아야한다. 나는 다음과 같은 방법으로이 작업을 시도했다 :이미지의 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 루프를 반복해야합니다. 더 나은 방법이라고 생각하지 않습니다. 이렇게 효율적으로 수행 할 수있는 방법이 있습니까? 어떤 오픈 소스 라이브러리가 이것을 달성 할 수 있습니까?
나는이 시도하지 않은,하지만 당신은 GPUImage을 시도하고 이미지의 RGB 값을 조정할 수 GPUImageRGBFilter 중 하나를 사용하거나 GPUImageLookupFilter과 녹색 및 청색 값을 멀리지도 할 수도 있습니다. –
이것은 현재 표준에 대한 간단한 처리량이 매우 낮으며 필터링을 수행하기 위해 모든 픽셀을 방문해야하므로 작업의 복잡성 (선형)입니다. 즉, 조금 더 똑똑한 라이브러리를 사용하면 일정한 요소 만 개선 할 수 있습니다. 그러나이 외에도, 당신이 놀고있는 사소한 응용 프로그램을 제외하면 RGB의 색상 구분은 나쁜 결과를 초래할 수 있습니다. 대신 하나의 채널을 HSB 및 기타와 같은 색조에 사용하는 색상 공간을 확인해야합니다. – mmgp