juuuding

[Computer Vision & Deep Learning] OpenCV - 영상 읽고 표시하기 본문

인공지능/cs231n

[Computer Vision & Deep Learning] OpenCV - 영상 읽고 표시하기

jiuuu 2023. 10. 30. 14:43

[영상 파일 읽고 윈도우에 디스플레이 하기]

 컴퓨터 폴더에 저장되어 있는 영상 파일을 읽고 윈도우에 디스플레이 해보겠다. 우선 openCV 기능을 사용하기 위하여 cv2 모듈을 import 해준다. imread()로 컴퓨터에 있는 파일을 읽어와주는데, 이때 파일 경로는 해당 코드 소스 파일이 저장되어 있는 폴도에 있어야 한다. 파일이 없거나 찾을 수 없다면 imread의 반환 값은 None이 된다.

 

 그 후 읽어온 영상 파일을 imshow()를 이용하여 윈도우에 디스플레이해준다. 여기서 첫번째 인수는 윈도우의 이름이고, 두번째 인수는 읽어올 영상 파일이다. 다음으로 waitKey()를 가지고 해당 파일이 윈도우에 표시되는 시간을 지정해준다. 이 함수에 인자 값은 ms 단위의 시간을 입력해주면 되고, 인수를 생략하거나 0으로 설정한다면 무한정 기다리게 된다. 예를 들어 waitKey(2000)을 입력하면 2초 후 영상이 종료된다. 마지막으로 destroyAllWindows()로 프로그램을 종료시켜준다.

 

[code]

'''
영상 파일 읽고 윈도우에 디스플레이 하기 
'''

import cv2 as cv
import sys

# 영상 읽기
img=cv.imread("resource/soccer.jpg")

# 이미지 파일을 찾을 수 없으면 exit 함수로 프로그램 종료
if img is None:
    sys.exit("파일을 찾을 수 없습니다.")

# 윈도우에 영상 표시
cv.imshow("Image Display",img)

# 윈도우에 표시되는 시간 지정
cv.waitKey()

# 윈도우 닫기
cv.destroyAllWindows()

print(type(img))    #<class 'numpy.ndarray'>
print(img.shape)    #(1080, 1920, 3) <- 3차원 배열

#(0,0), (0,1)의 화소 조사
print(img[0,0,0],img[0,0,1],img[0,0,2])
print(img[0,1,0],img[0,1,1],img[0,1,2])

 

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

 영상 디스플레이를 종료시킨 후, 영상의 type과 shape을 출력해보았다. opencv에서 영상은 numpy.array 클래스이고, 3차원 배열임을 알 수 있었다. 이 영상은 1920행, 1080열과 3개의 채널로 구성되며, 여기서 채널은 앞쪽부터 blue, green, red(BGR)에 해당한다. 또 (0,0)과 (0,1)의 화소 조사를 위의 코드처럼 진행하면, 순서대로 (0,0)과 (0,1)의 BGR 값을 알 수 있다.