2011-11-06 4 views
1

나는 Rubiks 큐브 EmguCV 색상 인식

떨어져 색상을 감지하는 프로그램을 만들려고 노력하고있어 내가가 지금까지 실행이 무엇의 스크린 샷을 먹으 렴, 나는 기본적으로 가장자리 감지 예제의 코드를 사용 emguCV와 함께 배송되어 소형 큐브를 감지하는 데 사용됩니다 (하지만 작은 큐브 중 일부는 감지되지 않지만 여기서 논의 할 문제는 아닙니다).

이제 작은 큐브는 어디, 나는 현재 내가, 색상을 결정과 같이하는 HSV 값을 사용하고, 그들이 어떤 색상 감지 할 찾는 후 : 대한

if (current_colour.Hue > 120 && current_colour.Hue < 170) 
{ 
    Colours[(int)colornames.W]++; 
} 
else if (current_colour.Hue > (170)) 
{ 
    Colours[(int)colornames.R]++; 
} 
else if (current_colour.Hue > 5 && current_colour.Hue < 20) 
{ 
    Colours[(int)colornames.O]++; 
} 
else if (current_colour.Hue > 47 && current_colour.Hue< 60) 
{ 
    Colours[(int)colornames.G]++; 
} 
else if (current_colour.Hue > 15 && current_colour.Hue < 30) 
{ 
    Colours[(int)colornames.Y]++; 
} 
else if (current_colour.Hue > 100 && current_colour.Hue < 110) 
{ 
    Colours[(int)colornames.B]++; 
} 

곳 값 시행 착오를 통해 얻은 각 색상은 포토샵을 사용하여 ... 나는 (특히 흰색과 빨간색으로) 뒤죽박죽 된 결과를 얻는 것처럼 더 좋은 방법이 있어야한다고 확신합니다. 도움이 필요하십니까?

+0

안녕하세요, 사각형 내에서 모든 데이터를 사용하여 평균 색상을 만들거나 GetAverage가 ROI의 평균값을 산출하는 개별 픽셀을 만드십니까? 더 나은 결과를 얻으려면 채도와 값을 사용하십시오. 또한 이상적인 세계에서 흰색이 (255,255,255) 및 빨간색 (0,0,255)이므로 특히 Bgr과 같은 다른 이미지 유형을 사용하여 결과를 확인할 수 있습니다. 당신이하고있는 일이 정말로 재미있는 일인 것처럼 보일 수도 있습니다. 희망을 도울 수있다. – Chris

+0

안녕하세요 크리스. 단일 픽셀을 사용했지만 지금은 (내 자신의 함수를 작성하여) 사각형 내에서 여러 (약 9 또는 10) 픽셀의 평균을 취하려고 생각합니다. GetAverareage는 나를 위해 이것을하십시오 (나는 봤지만 아무것도 발견하지 못했습니다). – 7VoltCrayon

+0

안녕하세요, 네, ROI를 사용하고 각 픽셀을 추가 한 다음 픽셀 수로 나누어서 모든 기능을 수행하므로 자신 만의 함수를 작성하는 것이 쉽습니다. 나는 이미지 인코딩과 압축 덕분에 노이즈가 신경 쓰지 않아서 검은 색이 컬러에 영향을 미치므로 단일 픽셀이 주요 오류를 일으킬 것이라고 예상합니다. 제곱 센터를 가지고 거기에서 일하는 것이 좋습니다. 건배 – Chris

답변

3

이미지가 예제처럼 간단하면 이미지에 히스토그램을 적용 할 수 있습니다. 히스토그램의 최고점은 사용하는 색상과 일치합니다.

히스토그램을 만들거나 3 개를 만들면 서로 멀리 떨어져있는 가장 높은 10 개의 빈 값을 가져 와서 색을 얻을 수 있습니다.