파이썬에서 OpenCV라이브러리는 다음 명령어를 통해 설치할 수 있다.
pip install opencv-python
그리고 라이브러리는 다음 명령어를 통해 불러올 수 있다.
import cv2
cv2라이브러리는 설치할 때와 불러올 때 이름이 다르니 주의하도록 하자.
그럼 이제 사진을 불러와보자.
import sys
import cv2
img = cv2.imread('logo.png')
if img is None:
print('Image load failed!')
sys.exit()
dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img', img)
cv2.imshow('gray', dst)
cv2.resizeWindow('img', 500, 500)
cv2.moveWindow('img', 15, 15)
cv2.moveWindow('gray', 600, 15)
img2 = cv2.resize(img, dsize=(0, 0), fx=0.2, fy=0.2, interpolation=cv2.INTER_AREA)
cv2.imshow('resize', img2)
cv2.moveWindow('resize', 150, 600)
cv2.waitKey()
cv2.destroyAllWindows()
간단하게 파이썬 로고 사진을 cv2라이브러리를 사용하여 띄워보았다.
cv2.imread 함수를 통해 이미지를 읽어올 수 있다.
cv2.cvtColor 함수를 통해 흑백변환, rgb를 hwc로 바꾸는 등의 작업이 가능하다.
cv2.moveWindow 함수를 통해 출력될 창의 위치를 지정할 수 있다.
cv2.resize 함수를 통해 출력될 사진의 크기를 변환할 수 있다.
desize 인자를 통해 픽셀값을 직접 정할 수 있다.
fx, fy 인자를 통해 비율을 정할 수 있다.
interpolation 인자는 resize 함수를 적용할 방식을 결정한다. 여러 방식이 있지만 cv2.INTER_AREA가 주로 쓰인다.
마지막으로 cv2.waitKey() 함수는 창이 출력되고 기다리는 시간을 지정해주는 함수이다.
인자는 int형만 집어넣을 수 있고 해당 인자의 ms만큼 대기한다.
값을 주지 않으면 시간제한없이 대기하며
해당 함수를 할당해주지 않으면 이미지를 출력한 뒤 곧바로 사라진다.
(출력을 했으니까 컴퓨터는 할 일을 다했으니 스스로 종료하는 것)
이제 동영상을 읽어와보자.
import sys
import cv2
cap = cv2.VideoCapture('7.mp4')
if not cap.isOpened():
print("Camera open failed!")
sys.exit()
print('Frame width:', round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('FPS:', round(cap.get(cv2.CAP_PROP_FPS)))
print('Frame count:', round(cap.get(cv2.CAP_PROP_FRAME_COUNT)))
while True:
ret, frame = cap.read()
print(ret)
if not ret:
break
print('Prop pos frames:', round(cap.get(cv2.CAP_PROP_POS_FRAMES)))
cv2.imshow('frame', frame)
delay = 1
if cv2.waitKey(delay) == 27:
break
cap.release()
cv2.destroyAllWindows()
cv2.VideoCapture 함수를 통해 동영상 객체를 받아올 변수를 할당한다.
이렇게 불러온 변수는 동영상이 끝나면 반드시 release() 함수를 통해 자원을 해제시켜야 한다.
cap.get(cv2.CAP_PROP_FRAME_WIDTH) 함수는 영상의 너비를
cap.get(cv2.CAP_PROP_FRAME_HEIGHT) 함수는 영상의 높이를
cap.get(cv2.CAP_PROP_FPS) 함수는 영상의 fps를
cap.get(cv2.CAP_PROP_FRAME_COUNT) 함수는 영상의 총 프레임을
cap.get(cv2.CAP_PROP_POS_FRAMES) 함수는 영상의 현재 프레임을 나타낸다.
cv2.VideoCapture.read() 함수의 두번째 인자는 프레임당 사진을 numpy배열로 읽어들이는데 이 때, 사진을 읽어들일 수 없다면 첫번째 인자에 False를 반환한다.
위의 코드에서는 True False 판단인자를 ret으로, 사진을 frame으로 할당하고 ret이 False 라면 동영상 자원을 해제한다.
동영상은 여러개의 사진을 빠르게 넘겨 보여주는 형태이기 때문에
사진과 마찬가지로 cv2.waitKey() 함수를 통해 동영상을 창으로 나타낼 수 있다.
0값을 주면 출력시간이 0ms니까 아무것도 나타나지 않는다.
또한 값을 주지 않으면 마냥 대기하므로 1ms마다 다음 프레임을 가져오도록 지정했다.
여기서 delay값을 1000으로 주면 1초마다 다음프레임으로 넘어간다.
'CV(컴퓨터비전)' 카테고리의 다른 글
파이썬 사진 밝기 조절하기 (0) | 2022.04.11 |
---|---|
동영상 잘라내기 (0) | 2022.04.05 |
Affine Transformation (0) | 2022.03.14 |
이미지 전단변환 (0) | 2022.03.06 |
이미지 회전하기 (0) | 2022.02.03 |
댓글