비전

[OpenCV] 이미지, 동영상

왕초보코딩러 2024. 8. 17. 18:21
728x90

opencv를 사용하기 위한 기본적인 라이브러리 설치

pip install numpy
pip install matplotlib		# 시각화 라이브러리
pip install opencv-python	# opencv 라이브러리
pip install pillow       	# 이미지 처리 라이브러리

 

 

opencv 라이브러리 임포트

import cv2

 


이미지

 

파일 불러오기

img = cv2.imread('image_path')

 

파일 저장하기

cv2.imwrite('save_path', img)

 

윈도우 창 만들기

cv2.namedWindow()

 

윈도우 창 끄기

cv2.destroyAllWindows()

 

윈도우 창에 파일 출력

(윈도우 창 이름을 꼭 써줘야 한다. 빈 문자열도 가능)

cv2.imshow('', img)

 

키 입력 대기

cv2.waitKey()

 

 


이미지 출력 기본 예제

import cv2

img = cv2.imread('image_path') # 이미지 부르기(NumPy 배열로 반환)

cv2.namedWindow('Display Window') # display window 만들기

cv2.imshow('Display Window', img) # display window에 이미지 올리기

cv2.waitKey() # 키 입력 대기

cv2.destroyAllWindows() # 키 입력되면 window 다 삭제

cv2.imread()로 나오는 결과는 numpy의 ndarray 형태로

(height, width, channel) shape이고,

파일 경로에 한글이나 특수 문자가 포함되면 이미지 파일을 제대로 읽지 못할 수 있다!

 

 

++

코랩과 주피터 노트북에서는 cv2.imshow()가 안되기 때문에 matplotlib의 imshow()를 사용해야 한다.

opencv의 색상 표기가 BGR 형태이고, matplotlib은 색상 표기가 RGB 형태이기 때문에 바꿔줘야 한다.

-> cv2.cvtColor(이미지, 색상변환코드)

matplotlib에서 (왼): cvtColor 하지 않은 경우/ (오): cvtColor 한 경우

import matplotlib.pyplot as plt

img = cv2.imread('image1.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

 

 


 

영상

 

카메라 / 영상 열기

# 원하는 동영상(mp4나 avi)이 있다면
cap = cv2.VideoCapture('video_path')

# 웹캠 키기
cap = cv2.VideoCapture(0)

 

 

카메라 / 영상이 잘 열리는지 확인

cap.isOpend() # T/F 반환

 

카메라 / 영상에서 프레임 받기(한 장 캡쳐)

# ret: 프레임이 잘 받아졌는지 True, False 반환 
# frame: 한 장 받은 프레임
ret, frame = cap.read()

 

프레임 보여주기

cv2.imshow('video display', frame)

 

저장할 파일 열기

cv2.VideoWriter(저장할 파일 이름, 프레임 압축을 위한 코덱 코드, 프레임 속도, 프레임 사이즈)

codec = cv2.VideoWriter_fourcc(*'DIVX')

fps = cap.get(cv2.CAP_PROP_FPS) # 비디오 프레임(fps) 받기

width = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 동영상 저장할 변수
out = cv2.VideoWriter('out.avi', codec, fps, (width, height))

 

카메라 / 영상 저장

out.write(frame)

 

키 입력 대기

cv2.waitKey(1) # 영상은 1

 

카메라 / 영상 종료

cap.release()

 


동영상 출력(웹캠) 기본 예제

cap = cv2.VideoCapture(0) # 웹캠 사용해서 open

codec = cv2.VideoWriter_fourcc(*'DIVX')
fps = cap.get(cv2.CAP_PROP_FPS) # 비디오 프레임(fps) 받기
width = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

out = cv2.VideoWriter('out.avi', codec, fps, (width, height)) # 동영상 저장할 변수

while True: # 영상이 계속 들어오면
    ret, frame = cap.read()
    
    if not ret: # 안읽히면
        break
        
    out.write(frame) # 영상 저장
    cv2.imshow('video', frame) # 영상 출력
    
    if cv2.waitKey(1) == 27: # ESC키면(누른 키의 아스키코드 값을 쓴다)
        break
    
out.release()
cap.release()
cv2.destroyAllWindows()

 

'비전' 카테고리의 다른 글

[MediaPipe] 포즈 인식  (0) 2024.08.25
[MediaPipe] 얼굴 인식  (0) 2024.08.23
[OpenCV] 특정 색 검출  (0) 2024.08.20
[OpenCV] 그리기 함수  (0) 2024.08.19
[OpenCV] 마스킹  (0) 2024.08.18