OpenCV 기초, 이미지 처리, 비디오 처리

    728x90
    반응형
    import cv2
    
    # 파일 열기
    image_path = 'balloon.webp'
    image = cv2.imread(image_path)
    
    # 이미지 크기
    image.shape
    
    # 이미지를 이루는 점의 개수
    image.size
    
    # 직접 계산
    image.shape[0] * image.shape[1] * image.shape[2]
    
    # 넘파이로 계산
    import numpy as np
    np.product(image.shape)
    
    # 자료형 보기
    image.dtype
    
    # 부동소수점 실수
    import struct
    x = 20
    print('{:032b}'.format(struct.unpack('>I', struct.pack('>f', x))[0]))
    # 이미지 보기
    # 새 창을 띄워서 이미지 보기
    cv2.imshow('image 1', image) # 제목이 image 1인 창에 이미지 표시
    cv2.waitKey(0) # 아무 키 입력을 기다림. 인자는 대기 시간(밀리초), 0일 경우 계속
    cv2.destroyAllWindows() # 모든 창 닫기
    
    # 노트북 내에서 이미지 보기
    from PIL import Image # Pillow 라이브러리 임포트
    def show(image):
        rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # BGR → RGB로 채널 순서 변경
        return Image.fromarray(rgb) # 객체 변환: 넘파이 배열 → PIL 형식으로
    show(image)

    PIL과 넘파이간 형식 변환

    # PIL과 넘파이간 형식 변환
    # PIL → 넘파이 배열
    import numpy as np
    pil_img = Image.open(image_path) # Pillow로 파일을 연다
    np.array(pil_img) # 배열로 변환
    
    # 넘파이 배열 → PIL
    Image.fromarray(image)

    비디오 처리

    # 비디오 처리
    # 비디오 열기
    video = cv2.VideoCapture('자전거.mp4')
    
    # 초당 프레임 수
    fps = video.get(cv2.CAP_PROP_FPS)
    
    # 비디오 재생
    while(video.isOpened()): # 파일이 열려있는 동안
        ret, frame = video.read() # 한 프레임 읽음
        if not ret: # 없으면
            break # 중단
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 흑백으로
        cv2.imshow('frame',gray) # 출력
        if cv2.waitKey(frame_interval) == ord('q'): # 키 입력을 기다림, q가 입력되면
            break # 중단
    video.release() # 파일 닫음
    cv2.destroyAllWindows() # 창 닫음
    
    
    # 웹캠 캡처
    # 캡처 준비
    video = cv2.VideoCapture(0)
    # 캡처할 이미지의 폭을 640으로 설정, 높이를 480으로 설정
    video.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
    video.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
    # 캡처
    ret, img = video.read()
    # ret: 성공 여부
    # img: 캡처된 이미지(넘파이 배열)
    # 카메라 해제
    video.release()
    # 1 프레임 간격(밀리초=1/1000초 단위)
    frame_interval = int(1000 / fps)

     

    728x90
    반응형

    'AI > 딥러닝(DL)' 카테고리의 다른 글

    이미지 연산  (0) 2024.11.12
    컴퓨터 비전 과업(Computer CV, Task)  (0) 2024.11.11

    댓글