Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 키보드 입력으로 출력된 영상 반전 시키기 - cv2.waitkey, ord() 함수

AI 꿈나무 2020. 9. 27. 11:17
반응형

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.

 


키보드 이벤트 처리하기

 이번 포스팅에서는 키보드 이벤트 처리하기를 알아보고 응용으로 'I' 키를 누르면 영상이 반전되는 것을 해보겠습니다.

 

1. 키보드 입력 대기 함수

 cv2.waitkey 함수로 키보드 이벤트를 처리할 수 있습니다.

 

[명령어 설명]

cv2.waitKey(delay=None) -> retval

 

• delay: 밀리초 단위 대기 시간. delay  0 이면 무한히 기다림. 기본값은 0

• retval: 눌린 키 값(ASCII code). 키가 눌리지 않으면 -1.

 

[참고 사항]

▪ cv2.waitKey() 함수는 OpenCV 창이 하나라도 있을 때 동작합니다.

▪ 특정 키 입력을 확인하려면 ord() 함수를 이용합니다.

▪ 주요 특수키 코드: 27(ESC), 13(ENTER), 9(TAB)

 

[예시 코드]

while True: # 무한 루프
    if cv2.waitKey() == ord('q'): # q를 누르면 종료
        break

 

 영상이 출력되면 q를 눌렀을 때 종료하는 코드입니다.

 

2. 특수키 입력 처리하는 방법

 cv2.waitKey()는 일반적인 키보드를 처리할 수 있지만 특수 키를 처리하지 못합니다.

 cv2.waitKeyEX() 함수를 이용하면 방향키, 함수키와 같은 특수 키를 처리할 수 있습니다.

 

 

3. 키보드에서 'i' 또는 'I' 키를 누르면 영상을 반전시키기

 cv2.waitKey 함수를 이용해서 'i', 'I' 키를 누르면 영상을 반전시키도록 해보겠습니다.

 

[코드]

# 영상을 흑백 영상으로 불러옵니다.
img = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)

# 영상이 불러와졌는지 확인
if img is None:
    print('Image load failed!')
    sys.exit()

# 윈도우 창 생성
cv2.namedWindow('image')

# 영상 출력
cv2.imshow('image', img)

# 영상 반전 코드
while True: # 무한 루프
    keycode = cv2.waitKey() # 키보드 입력 반환 값 저장
    if keycode == ord('i') or keycode == ord('I'): # i 또는 I 누르면 영상 반전
        img = ~img               # 영상 반전, 그레이스케일 영상에만 가능
        cv2.imshow('image', img) # 반전된 영상 출력
    elif keycode == 27:          # ESC 누를 시 종료
        break

# 모든 창 닫기
cv2.destroyAllWindows()

 

 

 출력된 영상에서 i 를 누르면 반전된 영상이 출력됩니다.

 다시 i를 누르면 반전이 되어 기본 영상으로 되돌아갑니다.

 

 

반응형