7. OpenCV 개요

인프런 ‘[개정판] 딥러닝 컴퓨터 비전 완벽 가이드’ 강의를 수강하며 공부한 내용을 정리한 글입니다.

컴퓨터 비전 일반화에 크게 기여

Python 기반 주요 이미지 라이브러리

Python 기반 주요 이미지 라이브러리

OpenCV 특징

  • 인텔이 초기 개발 주도
  • Windows, 리눅스, Mac OS X, 안드로이드, i-OS 등 다양한 플랫폼에서 사용 가능
  • 방대한 컴퓨터 비전 관련 라이브러리와 손쉬운 인터페이스 제공

OpenCV 이미지 로딩, 변환, 저장

  1. 이미지 로딩
         # 이미지 로드
         import cv2
         import matplotlib.pyplot as plt
    
         img_array = cv2.imread(파일명)
         plt.imshow(img_array)
    

    OpenCV 이미지 로딩

    imread( )를 이용한 이미지 로딩

    • OpenCV에서 이미지 로딩은 imread(‘파일명’)을 이용. imread(‘파일명’)은 파일을 읽어 넘파이 array로 변환
    • OpenCV에서 imread()를 이용하여 이미지 로딩 시 가장 주의해야 할 점은 OpenCV가 이미지를 RGB 형태가 아닌 BGR 형태로 로딩하기 때문에 색감이 원본 이미지와 다르게 나타난다는 것임.
  2. 이미지 변환

         #BGR to RGB
         import cv2
         import matplotlib.pyplot as plt
    
         bgr_img_array = cv2.imread(파일명)
         rgb_img_array = cv2.cvtColor(bgr_img_array, cv2.COLOR_BGR2RGB)
         plt.imshow(rgb_img_array)
    
    

    OpenCV 이미지 변환

    cvtColor( )를 이용하여 BGR을 RGB로 변환

    • OpenCV에서 imread(‘파일명’)을 이용하여 로딩된 이미지 배열을 BGR 형태의 배열이므로 이를 RGB 형태의 배열로 변환하려면 cvtColor(이미지 배열, cv2.COLOR_BGR2RGB)를 이용함.
  3. 이미지 저장

         #이미지 저장
         import cv2
         import matplotlib.pyplot as plt
    
         img_array = cv2.imread(파일명)
         cv2.imwrite(출력파일명, img_arrary)
    
    

    OpenCV 이미지 저장

    imwrite()를 이용하여 파일에 쓰기

    • OpenCV에서 메모리에 있는 이미지 배열을 다시 파일에 저장하려면 imwrite(‘출력파일명’, 이미지배열)을 이용함. 이때 imread( )로 인해 BGR형태로 되어 있는 이미지 배열을 다시 RGB 형태로 변환하여 저장함. 따라서 imread( )로 읽고, imwrite( )로 출력한 이미지 파일은 다시 RGB 형태의 파일이 됨.

OpenCV Windows Frame 인터페이스

  • OpenCV는 OS의 Window Frame과 바로 인터페이스 하여 사용할 수 있는 여러 기능을 제공.
  • 하지만 이들 기능을 사용하려면 Window Frame 생성이 가능한 GUI 개발 환경에서만 가능(Windows GUI, Linux X-windows 등).
  • 주피터 노트북 기반에서는 사용 시 오류 발생 -> 주피터 노트북 기반에서는 이미지 배열의 시각화에 matplotlib을 사용
  • cv2.imshow(이미지 array)는 이미지 배열을 window frame에 보여줌.
  • cv2.waitKey() : 키보드 입력이 있을 때까지 무한 대기
  • cv2.destroyAllWindows(): 화면의 윈도우 프레임 모두 종료

OpenCV 영상 처리 개요

OpenCV 영상 처리 개요

  • OpenCV의 VideoCapture클래스는 동영상을 개별 Frame으로 하나씩 읽어(Read)들이는 기능을 제공
  • VideoWriter는 VideoCapture로 읽어들인 개별 Frame을 동영상 파일로 Write 수행.

VideoCapture, VideoWriter 개요

  1. VideoCapture 개요

    VideoCapture 개요

  2. VideoWriter 개요

  • VideoWriter 객체는 write할 동영상 파일 위치, Encoding코덱 유형, write fps 수치, frame 크기를 생성자로 입력 받아 이들 값에 따른 동영상 Write 수행.
  • VideoWriter는 write시 특정 포맷으로 동영상을 Encoding 할 수 있음(DIVX, XVID, MJPG, X264, WMV1, WMV2)
    #VideoWriter 개요
    cap = cv2.VideoCapture(video_input_path)
    codec = cv2.VideoWriter_fourcc(*'XVID')
    vid_size = (round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    vid_fps = cap.get(cv2.CAP_PROP_FPS )
    vid_writer = cv2.VideoWriter(video_output_path, codec, vid_fps, vid_size) 

출처