[CV] 첫 OpenCV 프로그래밍

PSLeon ㅣ 2023. 6. 21. 14:30

반응형

첫 OpenCV 프로그래밍

처음 OpenCV 프로그래밍을 해보았다.

먼저, cv2 모듈과 sys 모듈을 불러오고 img 객체에 imread가 반환한 뚱이 사진을 저장하도록 하였다.

만약 파일이 없거나 읽는 도중에 오류가 발생하면 img는 None이 되는데, if문을 통해 오류 메시지를 출력할 수 있도록 작성해주었다.

img가 None이 아니라면 imshow 함수로 이미지를 윈도우창에 display한다. 첫 번째 인수인 "뚱이 이미지 출력"은 윈도우의 이름이고 두 번째 인수인 img는 디스플레이할 영상 또는 이미지이다. 이 명령 라인이 실행되고 나면 위 사진에서 볼 수 있듯이 윈도우가 생성되고 영상(이미지)가 나타난다.

 

OpenCV에서 영상은 numpy.ndarray 클래스 형의 객체

type(img) 명령어를 통해 img 객체가 numpy.ndarray 클래스임을 알 수 있다. numpy는 다차원 배열을 위한 표준 모듈인데, OpenCV는 img 객체가 표현하는 영상을 행과 열을 가진 채널로 구성하고 각 영상을 구성하는 한 점이 각각 바로 우리가 흔히 알고 있는 화소(pixel)이다.

https://stackoverflow.com/questions/28362355/opencv-what-is-the-dimension-of-the-array-representing-a-bgr-image

흔히 우리가 아는 순서는 RGB(Red, Green, Blue)의 순서지만 OpenCV에서는 기본이 BGR이다.

또한 위 그림을 보면 왼쪽 위부터 0, 1, 2, ... 순으로 늘어남을 확인할 수 있는데 이는 수학의 좌표계와 달리 컴퓨터 비전에서는 왼쪽 위를 원점으로 간주하며, 점의 좌표를 쓸때도 y축을 먼저 쓴다. (ex: (y, x))

 

(0, 0)과 (0,1)에 있는 픽셀값을 조사해보자.

(0, 0)의 픽셀값은 BGR을 구성하는 채널이 각각 46, 91, 52라는 사실을 확인할 수 있다.

그리고 (0, 1)의 픽셀값은 47, 92, 53이다.

 

이 픽셀을 그림판의 스포이드와 같은 기능으로 픽셀을 조사해보면 RGB와 BGR의 순서가 바뀌었음을 확인할 수 있다.

예를 들어, 스포이드로 (0, 0)의 픽셀을 찍어보면 (52, 91, 46)의 순서로 RGB가 나타난다.