OpenCV 이미지 및 동영상 실습
import cv2
import matplotlib.pyplot as plt
# cv2 이미지 출력하는 기능 실행
# 강아지
img = cv2.imread('./data/pets.jpg')
# plt 출력할 경우 색상공간 변형 bgr -> rgb : plt.imshow()
cv2.imshow('pets', img)
# 언제까지 윈도우 창이 켜져 있게 할건지 (아스키 코드 값으로 결과물을 받기)
# 닫힘 기능
print(cv2.waitKey(0)) # 0: 무한대기, ms초 값을 입력하는 부분 1s=1000ms
cv2.destroyAllWindows()
동영상 출력하기
- cv2.waitKey(밀리초): 동영상이 실행되는 시간에 대해서 제어
- cv2.waitKey(): 사용자의 키보드로부터 입력된 아스키 코드값을 반환 -> 윈도우창 꺼지는 기능 제어
import cv2
cap = cv2.VideoCapture('./data/dogs.mp4')
while True:
ch, frame = cap.read() # ch: 성공여부, frame: 받아온 이미지(프레임)
# 실패할 경우 while 멈추기
if not ch:
print('동영상 재생 끝 or 읽기 실패')
break
# 제대로 읽을 경우
cv2.imshow('video', frame)
# q라고 하는 알파벳을 클릭> 동영상 윈도우창 꺼짐
key = cv2.waitKey(33)
if key == ord('q'):
print('사용자에 의해서 영상이 종료')
break
cap.release() # 카메라 연결 자원 해제
cv2.destroyAllWindows()
# 아스키 코드값 확인하는 기능
ord('q')
- cv2.waitKey(delay) 함수: 프레임간의 간격을 제어하고 사용자의 입력을 처리할 수 있음
- 주어진 시간(밀리초) 동안 사용자의 키 입력을 기다림, 사용자의 입력이 들어올때가지 대기하며, 해당 키의 아스키 코드를 반환
- 매개변수 delay는 대기 시간을 나타내는 값으로 밀리초 단위. 30이 적히면 30밀리초 동안 사용자의 키 입력 대기
- 1000ms는 1s 대기, 500ms는 0.5s 대기, 0은 무한대기
import cv2
cap = cv2.VideoCapture(0)
while True:
ch, frame = cap.read() # ch: 성공여부, frame: 받아온 이미지(프레임)
# 실패할 경우 while 멈추기
if not ch:
print('동영상 재생 끝 or 읽기 실패')
break
# 제대로 읽을 경우
cv2.imshow('video', frame)
# q라고 하는 알파벳을 클릭> 동영상 윈도우창 꺼짐
key = cv2.waitKey(33)
if key == ord('q'):
print('사용자에 의해서 영상이 종료')
break
cap.release() # 카메라 연결 자원 해제
cv2.destroyAllWindows()
import cv2
cap = cv2.VideoCapture('./data/dogs.mp4')
cnt = 0
while True:
ch, frame = cap.read() # ch: 성공여부, frame: 받아온 이미지(프레임)
# 실패할 경우 while 멈추기
if not ch:
print('동영상 재생 끝 or 읽기 실패')
break
# 제대로 읽을 경우
cv2.imshow('video', frame)
# q라고 하는 알파벳을 클릭> 동영상 윈도우창 꺼짐
key = cv2.waitKey(33)
if key == ord('q'):
print('사용자에 의해서 영상이 종료')
break
# 사진 찍기, 프레임 저장하기
if key == ord('w'):
cnt += 1 # cnt + 1
print(f'./data/dog_img{cnt}.png 사진 저장')
cv2.imwrite(f'./data/dog_img{cnt}.png', frame, params=[cv2.IMWRITE_PNG_COMPRESSION,0])
cap.release() # 카메라 연결 자원 해제
cv2.destroyAllWindows()
import cv2
import matplotlib.pyplot as plt
plt.title('Happy App ~~~~')
plt.xticks([]) # 격자 표시 제거
plt.yticks([]) # 격자 표시 제거
for i in range(1,5):
selca = cv2.imread(f'./data/SurFun{i}.png')
selca = cv2.cvtColor(selca, cv2.COLOR_BGR2RGB)
plt.subplot(2,2,i)
plt.xticks([]) # 격자 표시 제거
plt.yticks([]) # 격자 표시 제거
plt.imshow(selca)
plt.show()