강의자료 · 로봇기초실습

Python으로 영상과 색 다루기

학습 목표

밝기·색·크기 변환이 검출에 필요한 정보를 어떻게 바꾸는지 눈과 배열 값으로 대조합니다.

실행 조건

opencv-python-headless·NumPy·Matplotlib을 사용합니다. 카메라는 기본 활동에 필요하지 않습니다.

배열에서 영상으로

시작 조건

120×160 BGR 영상에 파란 사각형을 그리고 RGB·Gray·HSV로 변환합니다.

진행 방법

  1. 원본 배열의 shape·dtype·범위를 확인하세요.
  2. 같은 영상을 Matplotlib에 올바르게 표시하고 채널 순서를 일부러 바꾼 결과와 비교하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
image=np.full((120,160,3),220,dtype=np.uint8);image[30:90,50:110]=(255,30,30)
rgb=cv.cvtColor(image,cv.COLOR_BGR2RGB);hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)
fig,axes=plt.subplots(1,2);axes[0].imshow(image);axes[0].set_title('BGR as RGB');axes[1].imshow(rgb);axes[1].set_title('Correct RGB')
print(image.shape,image.dtype,hsv[60,80])

결과 기록·자가 점검

표현:

shape:

dtype·값 범위:

해석:

확인할 점

색 범위로 물체 찾기

시작 조건

파랑 HSV 범위 H=100H=100…130, S≥80, V≥50을 사용합니다.

진행 방법

  1. inRange로 Mask를 만들고 원본 옆에 표시하세요.
  2. 영상 밝기를 낮춘 뒤 같은 기준으로 영역을 찾으세요.
  3. 잡음 또는 색이 비슷한 배경을 하나 추가해 어떤 오류가 생기는지 확인하세요.

남길 결과

mask=cv.inRange(hsv,np.array([100,80,50]),np.array([130,255,255]))
plt.figure();plt.imshow(mask,cmap='gray');print(np.count_nonzero(mask))
# TODO: 밝기·배경 조건을 바꿔 비교하세요.

결과 기록·자가 점검

조건:

검출 픽셀 수:

놓친 영역:

잘못 검출한 영역:

확인할 점

좌표를 다음 단계로 넘기기

시작 조건

Mask에서 검출한 영역의 중심을 pixel 좌표로 계산합니다.

진행 방법

  1. 행·열 Index와 x·y 좌표의 관계를 적으세요.
  2. 영상에 중심점을 겹쳐 그려 좌표가 맞는지 확인하세요.
  3. 영역이 하나도 없을 때 반환할 값을 정하세요.

남길 결과

yy,xx=np.nonzero(mask)
center=None if len(xx)==0 else (float(xx.mean()),float(yy.mean()))
print(center)
# TODO: 중심을 영상에 겹쳐 그리세요.

결과 기록·자가 점검

상황:

중심 x:

중심 y:

검출 유효 여부:

확인할 점

공식 예제·데이터