소스 뷰어
동영상 파일 읽기¶
프레임 번호에 다른 영상 처리 예¶
프레임 번호 | 영상 처리 |
---|---|
1 ~ 99 | 아무런 영상처리를 적용하지 않음 |
100 ~ 199 | 프레임별 화소의 파란색 성분에 100을 더해서 영상을 더 푸르게 만듦 |
200 ~ 299 | 프레임별 화소의 녹색 성분에 100을 더해서 영상을 더 녹색으로 만듦 |
300 ~ 399 | 프레임별 화소의 빨간색 성분에 100을 더해서 영상을 더 빨갛게 만듦 |
import cv2
def put_string(frame, text, pt, value=None, color=(120, 200, 90)) :
text = str(text) + str(value)
shade = (pt[0] + 2, pt[1] + 2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, text, shade, font, 0.7, (0, 0, 0), 2) # 그림자 효과
cv2.putText(frame, text, pt , font, 0.7, color, 2) # 작성 문자
capture = cv2.VideoCapture("img/video_file.avi") # 동영상 파일 개방
if not capture.isOpened(): raise Exception("동영상 파일 개방 안됨")
frame_rate = capture.get(cv2.CAP_PROP_FPS) # 초당 프레임 수
delay = int(1000 / frame_rate) # 지연 시간
frame_cnt = 0 # 현재 프레임 번호
while True:
ret, frame = capture.read()
if not ret or cv2.waitKey(delay) >= 0: break # 프레임 간 지연 시간 지정
blue, green, red = cv2.split(frame) # 컬러 영상 채널 분리
frame_cnt += 1
if 100 <= frame_cnt < 200: cv2.add(blue, 100, blue) # blue 채널 밝기 증가
elif 200 <= frame_cnt < 300: cv2.add(green, 100, green) # green 채널 밝기 증가
elif 300 <= frame_cnt < 400: cv2.add(red , 100, red) # red 채널 밝기 증가
frame = cv2.merge( [blue, green, red] ) # 단일채널 영상 합성
put_string(frame, "frame_cnt : ", (20, 320), frame_cnt)
cv2.imshow("Read Video File", frame)
pass
capture.release()