ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OpenCV - waitKey() 함수
    Python 2022. 6. 14. 00:41

     

    영상 처리와 관련된 업무를 숙지할 필요가 있어서 코드를 익히던 중에 waitKey 함수에 대한 궁금증이 생겨서 찾아보고 이에 대해 남기고자 합니다.

     

     

    OpenCV (Open Source Computer Vision)

    다양한 이미지와 영상을 처리할 수 있는 오픈소스 라이브러리

     

     

    waitKey() 함수

    • 키 입력을 기다리는 대기 함수
    • 인자 값으로 0 : 무한 대기 / ms(밀리세컨) 단위의 시간을 입력하면 해당 시간만큼 대기 (1000ms = 1초)
    • waitKey의 리턴 값은 키보드로 입력한 키와 동일한 아스키코드 값

     

    아래는 OpenCV 공식 문서의 튜토리얼 부분을 적용해본 코드입니다.

    import cv2 as cv
    import sys
    
    
    img = cv.imread(cv.samples.findFile('test_image.jpg'))
    
    cv.imshow('Display', img)
    
    if img is None:
        sys.exit('No Image')
    
    k = cv.waitKey(5000)
    
    if k == ord('s'):
        cv.imwrite('b.jpg', img)

     

    waitKey의 리턴 값에 대한 고민 없이 "왜 k == ord('s') 라는 조건식을 쓰지? 그냥 's'라고 하면 되는 거 아닌가?"라는 생각에 's' 값을 넣었더니 동작하지 않았습니다.

     

    그래서 찾아봤더니 waitKey의 리턴 값은 키보드로 입력한 키와 동일한 아스키코드의 값이므로 k라는 변수에는 아스키코드값이 저장되어 있기에 문자와 비교하려면 문자를 아스키 코드 값으로 변환해 주는 함수인 ord() 함수를 활용해야 정상적으로 동작합니다.

     

    위의 코드는 이미지를 처리하는 코드인데 이것도 흥미로웠지만 캠으로 라이브 영상 처리하는 코드가 더 흥미로웠습니다. 아래 코드를 참고하셔서 테스트해보시길 바랍니다.

     

    라이브 영상 테스트 코드

    import cv2 as cv
    
    
    cam = cv.VideoCapture(0)
    
    if cam.isOpened():
        while True:
            ret, frame = cam.read()
            if ret:
                cv.imshow('test_video', frame)
    
                # if cv.waitKey(1) != -1:
                #     break
    
                if cv.waitKey(1) == ord('s'):
                    break
            else:
                break
    
    cam.release()
    cv.destroyAllWindows()

     

     

    <참고 자료>

    OpenCV 공식 문서

    https://docs.opencv.org/4.x/db/deb/tutorial_display_image.html

     

     

     

     

    댓글

Designed by Tistory.