on
BGR vs RGB
Why does OpenCV use BGR and not RGB?
디자인에는 “최소 놀람의 원칙 (principle of least astonishment 또는 principle of least surprise)”이라는 것이 있다. 사용자가 디자인의 결과물을 마주쳤을 때 예상 가능한 범위를 넘어 당황하거나 놀라지 말아야 한다는 의미이다. 직관적인 디자인은 사용자가 고민을 하지 않도록 한다. 만약 문에 손잡이가 있다면 대부분의 사람들은 이 문을 끌어 당겨서 열려고 한다. 반대로 손잡이 대신 평평한 금속판으로 되어 있다면 당연히 이 문을 밀어서 열려고 한다. 이것이 “최소 놀람의 원칙”이 적용된 디자인의 결과이다.
OpenCV는 매우 유용한 라이브러리 이지만 이러한 원칙을 기준으로 보면 재앙에 가깝다. OpenCV는 오히려 “최대 놀람의 원칙 (principle of maximum surprise)”의 철학을 가지고 설계된 것처럼 느껴진다. 모든 문제의 원흉은 RGB가 아닌 BGR 형식을 사용함에서 기인한다.
나(이 글의 저자인 Satya Mallick 박사)는 OpenCV 창시자인 Gary Bradski 박사에게 이 문제에 대해서 물어본 적이 있다. 그의 대답은 다음과 같았다.
“왜 미국 철로 사이의 표준 간격은 4피트 8.5인치일까요? 왜 이렇게 이상한 치수를 기준으로 사용할까요?”
“이 질문에 대한 답은 영국에서 그렇게 사용하고 있었기 때문입니다. 그러면 영국은 왜 이런 이상한 치수를 철도 사이 간격으로 사용했을까요? 기차 이전의 전차에 사용하던 기준이었기 때문입니다. 그러면 전차 선로 기준은 왜 이렇게 정해졌을까요? 마차 제작에 사용하던 지그(jig)나 도구들이 이 기준에 맞춰져 있었기 때문입니다. 그러면 마차의 두 바퀴 사이 간격이 왜 이렇게 정해졌을까요? 예전부터 이 바퀴 간격으로 도로에 바퀴 자국 홈이 파여져 있었기 때문에 다른 간격을 사용할 경우 마차가 잘 파손되었기 때문일 겁니다. 누가 길을 이렇게 만들었을까요? 로마 제국 시절 전차가 이 간격의 마차를 사용했기 때문입니다. 이 마차 간격은 어떻게 정해졌을까요? 전쟁에 투입될 정도의 큰 말 두 마리가 나란히 마차를 끌 수 있을 적당한 간격이었을 것입니다.”
“드디어 답을 찾았습니다. 철로의 간격은 2천년 전에 말의 엉덩이 폭으로 결정되었습니다!”
“그럼 애초의 질문으로 돌아와서, OpenCV는 왜 BGR 형식을 선택했을까요? 처음 생겨날 당시의 카메라와 소프트웨어 회사들이 많이 사용했던 방식이기 때문입니다. 예를 들면, Windows에서 COLORREF를 사용하여 색상 값을 지정할 때 BGR 형식 0x00bbggrr을 사용합니다.”
이 포스트는 다음 출처의 글을 요약한 것임을 밝힙니다.