개발하는 삶
[Python] NumPy, OpenCV(이미지 처리), PIL 본문
NumPy
- C언어로 구현된 수치 계산을 돕는 파이썬 라이브러리
- 배열 정의, 크기 확인 등
import numpy as np
# 배열 np화 하기
data = [1,2,3,4]
array1 = np.array(data)
# 배열의 크기
array1.shape
# openCV로 이미지를 불러올 때, BGR 형태로 변환해 가져옴. 따라서 RGB로 변환 필요.
# COLOR_RGB2BGR : 컬러 버전
cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
PIL
- openCV 와 달리, PIL은 이미지가 가지고 있는 형식(RGB 등) 그대로를 가져옴.
- 글씨체 변경, 이미지화해서 한글 폰트 출력해주는 라이브러리.
- opencv는 한글 폰트를 지원해주지 않음. 따라서 이미지화 해줄수 있는 기능이 필요.
from PIL import ImageFont, ImageDraw, Image
# cv2 로 읽은 이미지는 numpy 배열이 되기 때문에, 상황에 따라 PIL 이미지 버전으로 바꿔주는 것.
Image.fromarray()
# 이미지 그려내는 도구
draw = ImageDraw.Draw()
# 폰트 종류/크기 지정
font_style = ImageFont.truetype("fonts/malgunbd.ttf", 20)
# 폰트 좌표/색/종류 지정
draw.text((733,45), "안녕", fill=(0,0,0), font=font_style)
- PIL ↔ NumPy 변환
- PIL 이미지로 변환 ▶ Numpy 배열 : np.array(), np.asarray()
- Numpy 배열 ▶ PIL 이미지로 변환 : Image.fromarray()
# PIL 이미지로 변환 -> Numpy 배열
np.array(img)
# Numpy 배열 -> PIL 이미지로 변환
Image.fromarray(np.array(img))
opencv로 동영상 불러오기
- 프레임으로 불러오는 기능
import cv2
# 동영상 불러오기
vd = cv2.VideoCapture('동영상.mp4')
# 동영상 객체가 준비됬는지 확인
if vd.isOpened():
# get() : 비디오 속성값 확인
vd.get(cv2.CAP_PROP_FPS) # 초당 프레임 수
vd.get(cv2.CAP_PROP_FRAME_COUNT) # 동영상 총 프레임 수
vd.get(cv2.CAP_PROP_FRAME_WIDTH) # 동영상 가로길이
vd.get(cv2.CAP_PROP_FRAME_HEIGHT) # 동영상 세로길이
# 동영상 프레임 받아오기
While True :
# 동영상 현재 프레임 받아오기 : read()
# ret (받아왔는지 True/False)
# frame (현재 프레임)
ret, frame = vd.read()
# 동영상 사용 종료
vd.release()
# 열린 모든 창을 종료
cv2.destroyAllWindows()
- 화면에 도형 추가(직사각형)
# frame : 불러온 이미지 혹은 영상 프레임
# 첫 좌표에서 두번째 좌표까지 도형이 그려짐.
# 세번째는 색, 네번째는 도형선굵기. -1 은 전체 색 채우기.
cv2.rectangle(frame, (100,100), (int(f_width)-1300,750), (255, 255, 255), -1)
- 이미지/영상의 크기 변환
# frame : 영상/이미지
# (가로,세로) : 이미지 크기
cv2.resize(frame, (100, 100))
- 이미지 화면 출력. 그 외.
# 이미지 화면 출력
cv2.imshow('이미지 창이름', 파일명)
# 다음 이미지/프레임을 기다리는 시간 (영상이라면 10 이상 해두기)
cv2.waitKey(10)
'JavaScript, Vue.js, CSS > Python&Django' 카테고리의 다른 글
[Django] 파이참 단축키, secret_key 보안 (0) | 2023.02.22 |
---|---|
[Django] svg 및 함수 (0) | 2023.01.05 |
[Django] 장고 태그 및 model.py 관련 (0) | 2023.01.02 |
[Django] 장고 설치 및 파일 구조 파악하기 (0) | 2022.12.28 |
[Python] 힙, 자료구조 (0) | 2022.06.23 |