OpenCV 이미지 및 동영상 실습

tpids·2024년 7월 11일

OpenCV

목록 보기
5/8

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()
  • frame 단위로 캡처한 이미지 저장
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()
  • selca 찍기 (팀 사진 4장 찍기)
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()
profile
개발자 공부중

0개의 댓글