Python으로 영상과 색 다루기
밝기·색·크기 변환이 검출에 필요한 정보를 어떻게 바꾸는지 눈과 배열 값으로 대조합니다.
실습 전에
01 같은 영상인데 왜 색이 다르게 보일까요?
설명
OpenCV의 BGR과 Matplotlib의 RGB 채널 순서가 다릅니다.
02 밝기를 바꾸면 같은 색도 놓칠까요?
설명
색 범위와 밝기 기준을 나누어 정하고 변환 전후 Mask를 비교합니다.
실행 조건
opencv-python-headless·NumPy·Matplotlib을 사용합니다. 카메라는 기본 활동에 필요하지 않습니다.
1. 배열에서 영상으로
시작 조건
120×160 BGR 영상에 파란 사각형을 그리고 RGB·Gray·HSV로 변환합니다.
진행 방법
- 원본 배열의 shape·dtype·범위를 확인하세요.
- 같은 영상을 Matplotlib에 올바르게 표시하고 채널 순서를 일부러 바꾼 결과와 비교하세요.
남길 결과
기록 항목과 확인할 점
- 표현
-
- shape
-
- dtype·값 범위
-
- 해석
-
확인할 점
- BGR 배열을 RGB처럼 표시하지 않았는가?
- OpenCV의 uint8 HSV에서 H가 0…179임을 확인했는가?
2. 색 범위로 물체 찾기
시작 조건
파랑 HSV 범위 …130, S≥80, V≥50을 사용합니다.
진행 방법
- inRange로 Mask를 만들고 원본 옆에 표시하세요.
- 영상 밝기를 낮춘 뒤 같은 기준으로 영역을 찾으세요.
- 잡음 또는 색이 비슷한 배경을 하나 추가해 어떤 오류가 생기는지 확인하세요.
남길 결과
기록 항목과 확인할 점
- 조건
-
- 검출 픽셀 수
-
- 놓친 영역
-
- 잘못 검출한 영역
-
확인할 점
- RGB와 HSV의 채널 의미를 섞지 않았는가?
- 검출 픽셀 수만으로 정확도를 평가하지 않았는가?
3. 좌표를 다음 단계로 넘기기
시작 조건
Mask에서 검출한 영역의 중심을 pixel 좌표로 계산합니다.
진행 방법
- 행·열 Index와 x·y 좌표의 관계를 적으세요.
- 영상에 중심점을 겹쳐 그려 좌표가 맞는지 확인하세요.
- 영역이 하나도 없을 때 반환할 값을 정하세요.
남길 결과
기록 항목과 확인할 점
- 상황
-
- 중심 x
-
- 중심 y
-
- 검출 유효 여부
-
확인할 점
- 0,0을 미검출로 쓰면서 실제 왼쪽 위 물체와 혼동하지 않았는가?
- 행이 y, 열이 x라는 관계를 유지했는가?
공식 예제·데이터