2-6. 카메라와 동영상 처리하기2

cv2.VideoWriter

    OpenCV에서 크기와 데이터 타입이 동일한 일련의 프레임을 동영상 파일로 저장할 수 있게 하는 클래스

    Fourcc(FOUR Character Code, 4-문자 코드): 동영상 파일의 코덱, 압축 방식, 색상, 픽셀 포맥 등을 정의하는 정수 값 (디테일한 내용은 여기 참고!) 아래 표는 자주 쓰이는 코덱들이다. 코덱들의 경우 사용을 위해 설치가 필요하다. (글쓴이는 다음의 팟플레이어 설치하면서 오픈 코덱도 같이 설치했던 기억이 있다.)

     * '' 앞에 *이 달릴 경우 안에 있는 문자열을 풀어서 쓰는 것과 동일하다. (ex. *'DIVX' = 'D','I','V','X')

cv2.VideoWritre_fourcc(*'DIVX') DIVX MPEG-4 코덱
cv2.VideoWritre_fourcc(*'XVID') XVID MPEG-4 코덱
cv2.VideoWritre_fourcc(*'FMP4') FFMPEG MPEG-4 코덱
cv2.VideoWritre_fourcc(*'X264') H.264/AVC 코덱
cv2.VideoWritre_fourcc(*'MJPG') MOTION-JPEG 코덱

    아래 표는 cv2.VideoCapture 클래스처럼 강의에서 소개된 함수들을 정리해 두었다.

     * 그레이스케일 영상을 저장할 경우 컬러 포맷으로 변환 후 저장해주어야 한다. 

     * 영상을 저장 할 경우, 소리는 포함되지 않는다.

함수 인자 설명
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor) -> cv2.VideoWriter 객체 image: 비디오 파일 이름
fourcc: fourcc (위 표 참고)
fps: 초당 프레임 수 (프레임간 시간 간격으로도 이해 가능)
frameSize: (w,h) 튜플로 이루어진 프레임 크기
isColor: True가 컬러 영상 (default), 아니면 False
저장을 할 동영상 파일 열기
cv2.VideoWriter.open(filename, fourcc, fps, frameSize, isColor) -> Boolean
cv2.VideoWriter.isOpened() -> Boolean   비디오 파일 준비 확인
cv2.VideoWriter.write(image) -> None image: numpy.ndarray 형식의 저장할 프레임 (영상) 프레임 저장

2-7. 키보드 이벤트 처리하기

키보드 입력 처리 함수

    기본키의 경우 cv2.waitKey(delay) 함수를, Windows 체제 기준 방향키, 함수키와 같은 특수키의 경우 cv2.waitKeyEx() 함수를 사용한다. (자세한 사용법은 OpenCV document를 참고하면 된다.)

     이 때, delay 변수는 ms 단위이며 0이 들어가게 되면 무한히 기다리게 된다.

     OpenCV Window 창을 하나라도 켜져 있을 때 동작한다는 점을 유의하자.

     특정키 입력 확인의 경우 cv2.waitKey() == ord('character') 형식을 사용하며 아니면 ASCII code의 숫자와 비교하면 된다.

    아래는 강의 예제로 특정키 키보드 입력에 따라 읽어온 이미지를 반전 시키거나 아니면 프로그램을 종료시키는 코드 예제의 코딩 순서이다.

# import OpenCV

# 프로젝트 폴더에 위치한 영상 하나를 그레이 스케일로 읽어오기

# 영상을 창으로 띄우기

# infinite Loop
 # 키보드 입력 받아 변수에 저장하기
 # 특정 키 입력을 받았을 경우
  # ~을 사용하여 영상 반전하기
  # 반전된 영상 창으로 띄우기
 # 특정 키 입력을 받았을 경우
  # Loop 탈출
  
# 모든 창 끄기

    글쓴이는 예제에 추가하여 Canny를 알려주셨으니 c나 C를 받으면 Canny 함수를 사용한 edge를 딴 영상을 만들고 o나 O를 누르면 기존 영상으로 돌아오는 코드로 수정해서 테스트해보았다. (상당히 재밌다)

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.


2-8. 마우스 이벤트 처리하기

마우스 이벤트 함수

    cv2.setMouseCallback(windowName, onMouse, param) 으로 OpenCV로 열어둔 창에서 일어난 마우스 이벤트를 내가 정의한 콜백 함수로 처리할 수 있게 등록한다. 여기서 windowName은 마우스 이벤트 처리를 수행할 창 이름이고, onMouse가 마우스 이벤트 처리를 위한 콜백 함수로써 함수 형식 + param 으로 데이터를 전달 받는다. 리턴 값은 없다.

     *이 함수의 경우 windowName이 꼭 필요하기 때문에 OpenCV 창을 꼭 띄워두고 사용해야 한다. (numpy.ndarray 형식 영상으로 imshow를 사용하거나, cv2.nameWindow(windowName)을 사용해서 창을 띄우자)

   콜백 함수 onMouse(event, x, y, flags, param)로 이루어져 있으며, event와 flag는 각각 마우스 이벤트 종류와 발생 시 상태로 아래 그림을 참고하면 된다 (강의 자료에서 제공해 주셨다.). x와 y는 마우스 이벤트가 발생한 좌표 값. param은 cv2.setMouseCallback에서 전달 받은 데이터이다.

     *flag 확인의 경우 == 연산보다 & 연산으로 확인하는 것이 유용한데 == 연산자를 사용하게 되면 키보드 입력값도 같이 받는 경우 판단을 못하게 된다. (비트 단위로 flag가 떴는지 확인이 필요하다.)

onMouse 콜백 함수 event 인자 값 (출처: FastCampus)
onMouse 콜백 함수 flags 인자 값 (출처: FastCampus)

    아래는 강의 예제로 마우스 입력을 사용하여 그리기를 할 수 있는 코드 예제의 코딩 순서이다. 추가적으로 이벤트 발생 시 마우스의 좌표를 print 함수로 출력해 터미널에서 모니터링 할 수 있다.

# import OpenCV

#define variables to store old x, y value
# on_mouse function definition
 # make old x, y value variables as global
 # check if event is Left Button Pressed
  # if it is, store current x and y as old x and y
 # else if event is mouse moving
  # if flag & Left Button is pressed and hold
   # draw line from old x, y to x,y with line type AA for smoothness
   # show on window
   # store x, y to old y and y

# make empty image using ones function

# show empty image on window
# set Mouse Call back function with defined on_mouse function
# wait for any keyboard input to finish

인증 타임

카메라와 동영상 처리의 경우 강의 자료에 예제 코드를 제공해 주셨지만 PC에 카메라가 설치되어 있지 않아서 테스트 해 볼 수 없었다. ㅜ 키보드 입력 처리의 경우 앞선 수업들에서 해봤기 때문에 복습하는 느낌이였는데 마우스 이벤트 처리 부분은 완전 처음 배우는 내용이라 신기했다. PC 쓸 때 아무 생각 없이 마우스를 사용하고는 했는데 뒤에서 이렇게 많은 처리가 이루어지고 있을거라 생각하니 머리가 좀 띠용해지는 부분이 있었다. 

원래 계획했던 수강 플랜보다 너무 많이 밀려버려서 오늘은 최대한 많이 수강해보자 하였다. 다음 며칠간은 이렇게 몰아 들어야 할거 같은데 언제 블로그로 정리하나 좀 슬퍼진다 ㅠㅠ.

 

2-6. 공부 인증 사진

 

2-7. 공부 인증 사진
2-8. 공부 인증 사진


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online

 

패스트캠퍼스(FastCampus) 강의 둘러보러 가기 

   

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.


 

+ Recent posts