머신러닝/CNN

opencv 기초, 이미지 동영상 웹캠 가져오기

Olivia-BlackCherry 2025. 2. 19. 13:03

 

목차

    영상인식기술을 학습하기 위해 오늘부터는 pycharm 환경에서 python3.11버전을 이용해서 opencv모듈을 사용하여 학습을 진행한다. 

    오늘 공부할 내용은 총 3가지이다. 

    1. image 가져오기

    2. video 가져오기

    3. webcam 열기

     

    Resource 폴더에는 이미지와 비디오를 미리 첨부해 놓는다.

     

     

    0. openCV 모듈 설치하기

    Requirements txt파일을 생성하고 내용에 opencv-python이라고 적는다.

    터미널에서 아래의 내용을 입력하여 모듈을 설치한다.

    pip install -r requirements.txt

     

     

    1. image 가져오기

    import cv2
    
    #Read Image using OpenCV
    image = cv2.imread("../Resources/Images/image1.jpg")
    
    #Display the Image
    cv2.imshow("Image", image)
    
    #waitKey : 키 입력 대기
    #1000 = 1sec
    #0 : 수동으로 닫기 조절
    cv2.waitKey(0)
    
    cv2.destroyAllWindows()

     

     

    2. video 가져오기

    #Import All the Required Libraries
    # pip install opencv-python
    #cv2 이용해서 비디오를 프레임 단위로 읽고 화면에 출력하기
    import cv2
    cap = cv2.VideoCapture("../Resources/Videos/video1.mp4")
    
    while True:
        #ret : T/F 프레임을 정상적으로 읽었는지 여부 확인
        #frame : 현재 프레임 이미지
        ret, frame = cap.read()
        if ret:
            cv2.imshow("Frame", frame)
            # 비디오 속도조절 : 1의 값이면 거의 실시간 송출
            # OxFF 키보드입력처리, ord 문자의 아스키값을 반환
            if cv2.waitKey(1) & 0xFF == ord('1'):
                break
        else:
            break
    
    cap.release()
    cv2.destroyAllWindows()

     

    1)  cv2.waitKey(1)

    • OpenCV에서 키 입력을 대기(wait) 하는 함수
    • 괄호 안의 숫자(1)는 대기 시간(ms) 을 의미
    • 1ms 동안 키 입력을 기다림
      • 1로 설정하면 비디오가 거의 실시간으로 재생됨
      • 30으로 하면 30ms 동안 대기(프레임 속도 조절 가능)

    2) & 0xFF

    • 키보드 입력을 처리할 때 비트 연산자(& 0xFF)를 사용
    • OpenCV는 32비트 정수로 키 입력을 처리하는데, 이를 8비트(ASCII 코드) 값만 남기기 위한 연산
    • Windows에서는 없어도 되지만, Linux나 macOS에서는 필수

     

    3) ord('1')

    • '1' 문자의 ASCII 값(십진수 49)을 반환
    • 즉, 사용자가 숫자 1 키를 누르면 ord('1')의 값(49)과 cv2.waitKey(1)의 값이 같아져 break 실행

     

     

     

    3. webcam 열기

    import cv2
    
    #Create a Live Webcam Feed Capture Object
    cap = cv2.VideoCapture(0)
    
    while True:
        ret, frame = cap.read()
        if ret:
            cv2.imshow("Webcam", frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    
    # 비디오 캡쳐 객체 연결을 해제
    # 비디오 파일을 열어서 사용했다면 사용이 끝난 후 반드시 해당 함수 호출하여 카메라 계속 열려있지 않도록
    cap.release()
    cv2.destroyAllWindows()

     

    opencv 기초, 이미지 동영상 웹캠 가져오기