• Feed
  • Explore
  • Ranking
/
/
    [영상처리프로그래밍]

    #1. OpenCV-Python

    수업 정리
    PythonOpenCV영상처리
    남
    남연진
    2024.09.29
    ·
    4 min read

    1. OpenCV란?

    Open Source Computer Vision
    영상 처리에 사용할 수 있는 오픈 라이브러리이다.

    OpenCV의 영상처리 및 컴퓨터 비전의 라이브러리를 사용하여 응용 프로그램을 쉽고 빠르게 만들 수 있다.

    2. NumPy란?

    과학 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 유용한 함수를 제공해주는 라이브러리

    2.1. ndarray의 속성

    ndarray란 Numpy의 n차원 객체로서, 하나의 데이터타입만 넣을 수 있다. (= C의 Array)

    이미지 배열은 numpy배열이다.

    import cv2
    img = cv2.imread("D:\citt.jpg")
    
    print(type(img))
    
    >> <class 'numpy.ndarray'>

    • ndim : 차원의 수 (기본적으로는 R, G, B, 즉 3이다.)

    • shape : 각 차원의 크기를 튜플로 나타냄

    • size : ndarray에 있는 요소의 총 개수

    • dtype : 요소의 데이터타입

    • itemsize : 각 요소의 바이트 크기

    2.3. ndarray 객체 만들기

    2.3.1. 값으로 만들기

    import numpy as np
    
    np.array(list [, dtype])
    • dtype : uint8, uint16, uint64(부호 없는 정수) / float16, float32, float64(부동소수점을 갖는 실수)

    보통은 8비트가 많이 쓰이는데, 그 이유는 픽셀의 밝기값이 256단계, 즉 8비트 데이터를 쓰기 때문이다.

    import cv2
    import numpy as np
    
    ary = np.array([1, 2, 3, 4])
    print(ary)
    print(ary.dtype)
    
    >>[1 2 3 4]
    >> int64 (dtype값을 지정하지 않았으므로 array([])안에 있는 type으로 지정됨)
    ary = np.array([1, 2, 3.14, 4])
    print(ary)
    print(ary.dtype)
    
    >>[1.   2.   3.14 4.  ]
    >> float64 
    (ndarray는 한 가지 타입만 들어가기 때문에 타입이 섞여있으면 더 포괄적인 자료형으로 지정된다.)
    ary = np.array([1, 2, 3, 4])
    print(ary.shape)
    
    >> 4
    
    ary = np.array([[1, 2], [3, 4]])
    print(ary)
    print(ary.shape)
    
    >> [[1 2]
       [3 4]]
    >> (2, 2)
    
    ary = np.array([[1],[2],[3],[4]])
    print(ary)
    print(ary.shape)
    >> [[1]
       [2]
       [3]
       [4]]
    >> (4, 1)

    2.3.2. 크기와 초기값으로 만들기

    • np.empty : 쓰레기값으로 채움

    • np.zeros : 0을 채움

    • np.ones : 1로 채움

    • np.full(shape, fill_value [, dtype)) : fill_value값으로 채움

    a = np.empty((2,3))
    print(a)
    print(a.dtype)
    
    >> [[ 4.64583300e-308  4.66664552e-308 -2.57703408e+010]
       [-4.70231646e-064  2.26262303e-319  0.00000000e+000]]
    >> float64 (empty는 초기화가 아님에 유의하기)
    초기화가 필요할 때는 a.fill(0)처럼 fill()함수를 사용하기

    dtype을 지정해줄 때

    c = np.zeros((2,3), dtype=np.unit8)

    컬러 이미지는 하나의 픽셀이 RGB값을 가지므로 3차원 배열이 필요하다.

    2.3.3. 기존 배열과 같은 크기의 배열 만들기

    • np.empty_like(array [, dtype]) : 크기만 같고 안에는 쓰레기값이 들어간다

    • np.zeros_like(img) : 0으로 채움







    - 컬렉션 아티클