본문 바로가기

난 이 분야 전문가야!/OpenCV

컴퓨터비전인강 2주차 :: openCV 웹캠, 비디오 재생 및 저장

Ch 02. OpenCV-Python 기초 사용법 - 04. OpenCV 그리기 함수

Ch 02. OpenCV-Python 기초 사용법 - 05. 카메라와 동영상 처리하기 1

Ch 02. OpenCV-Python 기초 사용법 - 06. 카메라와 동영상 처리하기 2

 

 

오늘은 openCV에서 영상 위에 선이나, 도형, 문자를 그리는 기능과 카메라와 동영상을 어떻게 불러오고 저장하는지에 대해 공부해 보았습니다.

 

 

>> openCV 그리기 함수

 

openCV는 영상에 선, 도형, 문자열을 그리는 함수를 제공한다.

그리기 함수를 사용할 경우 영상 데이터 자체를 변경하기 때문에 원본데이터를 유지하고 싶다면 복사본을 만든 후 복사본 위에

그리기를 실행해야 한다.

 

cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

     -> 선을 그리는 함수이다. pt1과 pt2는 각각 시작점과 끝점의 좌표를 의미하고 튜플 형태로 x좌표와 y좌표를 넘겨주면 된다.

cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

cv2.rectangle(img, rec, color, thickness=None, lineType=None, shift=None)

     -> 직사각형을 그리는 함수이다. pt1과 pt2에 각각 좌측 상단과 우측 하단의 꼭지점 좌표를 넘겨주면 된다.
          rec은 (x, y, width, height)를 튜플로 받는다.

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)   -> 원을 그리는 함수

cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

     -> 다각형을 그리는 함수이다. pts에 여러개의 튜플 형태의 x, y 좌표를 리스트로 묶어 넘긴다.

          isClosed는 폐곡선인지 아닌지를 나타내면 boolean값을 넘겨준다. true == 폐곡선

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, ineType=None, shift=None)   -> 문자를 그리는 함수

 

> 알아두면 좋은점

pt1pt2의 좌표는 영상 안에 있지 않아도 된다.

도형에서 thickness-1을 넣을 경우 내부를 채운다.

곡선 도형의 경우 lineTypecv2.LINE_AA로 하여 조금더 부드럽게 그려주는 것이 보기 좋다.

 

 

>> 웹카메라 불러오기

우선 cap 변수에 VideoCapture 객체를 생성해준 후

cap.open(0) 함수로 pc의 디폴트 웹 카메라를 불러온다.

(cap.open(0)를 사용하지 않고 cv2.VideoCapture(0)으로도 실행 가능)

cap.isOpened() 함수로 카메라가 정상적으로 불러와졌는지 확인할 수 있다.

cv2.VideoCapture.read(image=None) -> retval, image

read 함수는 이미지를 성공적으로 불러왔는지의 여부도 같이 반환하기 때문에

frame = cap.read() 로 하면 안되고

ret, frame = cap.read() 로 해야 정상적으로 반환값을 받을 수 있다.

 

> 카메라 장치 속성값 참조

 

cap.get(propId) 함수를 사용하여 카메라 또는 비디오 장치의 속성 값들을 불러올 수 있다.

propId 옵션에는

     CAP_PROP_FRAME_WIDTH

     CAP_PROP_FRAME_HEIGHT

     CAP_PROP_FPS

     CAP_PROP_FRAME_COUNT

등 여러가지 속성값들을 가져올 수 있다.

 

cap.set(propId) 함수를 사용하여 속성값을 변경할 수도 있다.

(이미 정해져 있는 비디오의 속성 값은 변경하지 말자)

 

 

>> 동영상 불러오기

>> 동영상 저장하기

 

cv2.VideoWriter 클래스를 사용하여 일련의 프레임을 동영상 파일로 저장할 수 있다.
일련의 프레임은 모두 크기와 데이터 타입이 같아야 한다.

 

Fourcc: 어떤 압축 방식을 나타내는 4개의 문자로 이루어진 코드이다.

자주 사용하는 fourcc: DIVX, XVID, X264, MJPG

이러한 코덱들을 사용할 수 있게 컴퓨터 환경이 갖춰줘야 한다.

 

cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor=None)

(영상 데이터만 저장함 소리 데이터는 저장하지 않음.)

 

 

 

 

강의 링크: bit.ly/2NTHHz7

728x90