본문 바로가기
수업(국비지원)/Python

[Python] 동영상 파일 저장, 출력, 저장된 동영상 이미지 색상 수정

by byeolsub 2023. 4. 27.

📌

##### 동영상을 파일로 저장하기
import cv2

capture = cv2.VideoCapture(0) # 카메라 객체 연결
if capture.isOpened() == False :
    raise Exception("카메라 연결 안됨")
fps = 20.0 # 카메라의 초당 프레임의 수. 
delay = round(1000/fps)
size = (640,480)
# *"DX50" : 코덱 종류 설정. (* : 포인터 변수.)
fourcc = cv2.VideoWriter_fourcc(*"DX50") #코덱설정

print("프레임 해상도: ", size) 
print("압축코덱숫자: ", fourcc) 
print("delay: %2d ms" % delay) 
print("fps: %.2f" % fps) 

# 카메라 설정
capture.set(cv2.CAP_PROP_ZOOM, 1)
capture.set(cv2.CAP_PROP_FOCUS, 0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, size[0])
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, size[1])   

# 동영상을 출력해주는 파일 설정
writer = cv2.VideoWriter("images/vidoe_file.avi", fourcc, fps, size)

if writer.isOpened() == False : 
    raise Exception("동영상 파일 개방 오류")

while True :
    ret, frame = capture.read() # 순간이미지 파일
    if not ret : break  
    if cv2.waitKey(30) >= 0 : break
    writer.write(frame) # 이미지 저장.
    cv2.imshow("View Frame from Camera", frame) # 화면에 현재 이미지를 출력
writer.release() # 출력파일과의 접속을 종료
capture.release() # 카메라와 접속 종료

📌

# 저장된 동영상 파일 출력하기
capture =  cv2.VideoWriter("images/vidoe_file.avi")

if writer.isOpened() == False : 
    raise Exception("동영상 파일 개방 오류")
frame_rate = capture.get(cv2.CAP_PROP_FPS) # 초당 frame 수
print("frame_rate: ", frame_rate) # 20

while True: 
    # capture : 동영상 파일
    ret, frame = capture.read()
    if not ret : break # 동영상 파일을 읽기 종료 되었을 때.
    if cv2.waitKey(30) >= 0: break
    cv2.imshow("View Frame from Camara", frame)
capture.release() # 동영상 파일과의 접속 종료.

📌

# 이미지의 색상 수정하기
capture =  cv2.VideoWriter("images/vidoe_file.avi")

if writer.isOpened() == False : 
    raise Exception("동영상 파일 개방 오류")
frame_cnt = 0
while True: 
    ret, frame = capture.read()
    if not ret or cv2.waitKey(50) >= 0: break
    # cv2.split(frame) : 색상별로 분리. 
    blue, green, red = cv2.split(frame) # bgr 색상에 해당하는 배열을 분리
    # 강사님의 동영상 기준
    blue[0,0] # 201
    green[0,0] # 216
    red[0,0] # 255
    
    frame_cnt += 1 
    
    # if 50 <= frame_cnt < 100: <= 파이썬에서는 이런 식의 조건문이 가능하다.
    # 자바에서는 if(50 <= frame_cnt) and (frame_cnt < 100): 이런식의 조건문 사용.
    # cv2.add : 함수값 증가. 
    # cv2.add(blue, 100, blue) : blue+100 배열값을 => blue에 저장
    if 50 <= frame_cnt < 100: cv2.add(blue, 100, blue)
    elif 100 <= frame_cnt < 150: cv2.add(green, 100, green)
    elif 150 <= frame_cnt < 300: cv2.add(red, 100, red)
    
    # cv2.merge([blue, green, red]) : 다시 bgr이라는 배열의 값을 병합.
    frame = cv2.merge([blue, green, red])
    put_string(frame, "frame_cnt: ", (20,320), frame_cnt)
    cv2.imshow("Read Video File", frame)
capture.release()

 

'수업(국비지원) > Python' 카테고리의 다른 글

[Python] 2022-12-27 복습  (0) 2023.04.27
[Python] 숫자 인식하기  (0) 2023.04.27
[Python] 동영상 파일 출력  (0) 2023.04.27
[Python] 이미지 형태 분석  (0) 2023.04.27
[Python] opencv - 이미지 출력  (0) 2023.04.27