일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 모션감지 카메라
- 파이썬 시각화
- 영상 이진화
- 영상에 도형
- 파이썬 컴퓨터비전
- event-mouse
- 이미지 히스토그램
- 인공지능
- 도커
- AI
- track bar
- 영상클립 캡처
- 파이썬 기초
- 논문리뷰
- 컴퓨터 비전
- 이미지 시각화
- Computer-vision
- 시각화 기초
- docker
- 픽셀연산
- equalize
- abs diff
- 그레이 스케일
- weighted sum
- matplotlib
- binarization
- Docker Container
- 공대아저씨
- 딥러닝
- 도커 컨테이너
- Today
- Total
공부하는 아저씨의 IT 공방
파이썬 시각화 공부 4일(영상 클립 캡쳐, 영상에 도형 집어 넣기) 본문
안녕하세용 공대아저씨 입니다 :)
지난 시간에는 파이썬 시각화에서 기본적인 도형그리기부터 오징어 게임 로고 만들어 보기 실습을 한번 해봤죠.
오늘은 비디오 혹은 영상 캡쳐를 해보고 영상에 어제 실습한 도형을 입히는 것 까지 한번 해보겠습니다.
1. 비디오 캡처(기본)
import cv2
cap = cv2.VideoCapture(0) # 비디오 캡쳐 명령어 통해서 객체를 만들고
width = int(cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320))
height = int(cap.set(cv2.CAP_PROP_FRAME_COUNT, 240))
while True:
_, frame = cap.read() # 2개값이 넘어옴, 영상이 넘어오고 처리까지
cv2.imshow('video', frame)
if cv2.waitKey(1) ==27: # 1을 넣어야 실시간으로 처리, 27번은 esc임
break
cap.release()
cv2.destroyAllWindows()
일단 기본적으로 저는 노트북에 있는 카메라를 사용했습니다.
cap이라는 변수에 비디오 캡쳐 명령어를 통해서 객체를 우선적으로 만들어 주고,
원하는 화면의 크기를 설정해줍니다.(width, height 설정 필요)
이후에 while 구문을 사용하는 이유는 비디오 캡쳐와 화면에 영상을 표시하는 작업을 지속적으로 반복 실행하기
위해서 입니다. 즉, 웹캠으로부터 비디오 프레임을 읽어서 그 프레임을 계속해서 화면에 표시해주는 것입니다.
이번에는 같은 화면에 3일차에 공부한 도형을 화면에 한번 입혀보겠습니다.
2. 도형 추가
import cv2
cap = cv2.VideoCapture(0) # 비디오 캡쳐 명령어 통해서 객체를 만들고
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_COUNT, 240)
while True:
_, frame = cap.read() # 2개값이 넘어옴, 영상이 넘어오고 처리까지
cv2. circle(frame, (160, 120), 90, (0, 0, 255)) #지름이 180인 원을 화면에 추가
cv2.imshow('video', frame)
if cv2.waitKey(1) ==27: # 1을 넣어야 실시간으로 처리, 27번은 esc임
break
cap.release()
cv2.destroyAllWindows()
여기서 while 구문에 cv2.circle 코드를 통해서 지름이 180의 크기인 원을 한번 그려보았습니다.
이번에는 동영상을 불러와서 한번 불러와 보겠습니다.
그전에 실습을 위한 동영상을 공유해드리겠습니다.
3. 동영상 추가
import cv2
cap = cv2.VideoCapture('./img/walking.avi') # 비디오 캡쳐 명령어 통해서 객체를 만들고
while True:
ret, frame = cap.read() # 2개값이 넘어옴, 영상이 넘어오고 처리까지
if cv2.waitKey(1) ==27 or ret != True: # 1을 넣어야 실시간으로 처리, 27번은 esc임
break
# waitkey 값을 올리면 영상 속도가 늦춰짐
cv2. circle(frame, (160, 120), 90, (0, 0, 255)) #지름이 180인 원을 화면에 추가
cv2.imshow('video', frame)
cap.release()
cv2.destroyAllWindows()
영상 출력에도 도형을 한번 넣어보았습니다.
나중에는 이런 도형이 정해진 위치가 아니라 특정 객체를 인식하는 곳에 bounding box를 만들도록 하는 실습을 한번
진행해 보도록 하겠습니다.
4. 동영상 실습
import cv2
cap = cv2.VideoCapture('./img/walking.avi') #0을 넣으면 내컴퓨터 카메라로
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
cv2.namedWindow('video', cv2.WINDOW_NORMAL) #노말옵션을 통해 크기조절이 가능하도록
while True:
ret, frame = cap.read()
if not ret or cv2.waitKey(30) ==27:
break
else :
cv2.rectangle(frame, (10,10, width-20, height-20), (255, 0, 0), 2, cv2.LINE_AA)
cv2.putText(frame,'width'+str(width), (30, 30),
cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 255), 1, cv2.LINE_AA)
cv2.putText(frame,'height'+str(height), (30, 70),
cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 255), 1, cv2.LINE_AA)
cv2.putText(frame,'gongdae', (int(width/3), int(height*4/5)),
cv2.FONT_HERSHEY_PLAIN, 2, (0, 255, 0), 1, cv2.LINE_AA)
cv2.imshow('video', frame)
cap.release()
cv2.destroyAllWindows()
동영상에 좌측 상단에는 폭과 너비 정보를 입력하였고,
가운데쯤에는 'gongdae' 라는 단어를 입력해보았습니다.
CV에서 굉장히 중요한거는 사용자가 원하는 정보를 실시간으로 화면과 함께 출력해주는 것입니다.
기초적인 지식이지만 나중에 모두 활용되는 것인 만큼 한번씩 실습해보시는 걸 추천드립니다. :)
자, 오늘은 간단하게 파이썬 코드를 이용해서 웹캠과 동영상을 출력하고,
동영상에 원하는 텍스트를 입력하는 방법을 공부해 보았습니다.
다음 시간에는 event-mouse, keyboard, track bar(마우스,키보드, 트랙바의 조절에 따라 화면의 상태를 바꾸는법)에 대해서
공부를 해보겠습니다.
긴글 읽어주셔서 감사합니다 :)
'파이썬 기초(1일 1코드)' 카테고리의 다른 글
[Docker container] 도커 컨테이너의 개념과 구조, 가상환경 구축하기, 사용해야 하는 이유 4가지 (0) | 2023.09.10 |
---|---|
파이썬 시각화 공부 5일(event-mouse, keyboard, track bar) (2) | 2023.09.09 |
파이썬 시각화 공부 3일(라인, 직사각형, 원 그리기, 오징어 게임 로고 만들기) (0) | 2023.09.06 |
파이썬 시각화 공부 2일(픽셀연산) (2) | 2023.09.05 |
파이썬 시각화 공부 1일(기존 컬러 이미지 흑백 변환, Matplotlib 사용) (0) | 2023.09.04 |