컴퓨터 비전 실전 1

김찬울·2021년 8월 19일
0

cv2 모듈의 함수에 대한 설명이다.

cv2.imread(), cv2.imwrite()

각각은 파일을 불러오고, 내보내는 함수이다.

cv2는 only 시각매체를 다룬다.

시각 매체라 함은 간단히 사진과 영상이 있다.
결국에 영상은 사진의 모음이고, 사진은 픽셀의 모음이다.

그래서 우리가 벡터형으로 이미지를 직접 만들 수 있고, 그걸 가능케 하는 것이 openCV다.

cv2.imread('파일 위치')

이미지를 불러오기에 imread이다. 파일 위치를 선택하고 해당 이미지를 읽어와서 객체에 저장하면 객체에는 이미지에 대한 정보가 담겨진다. 이는 픽셀에 대한 rgb값의 모음이다.

반대로 받아오고 수정한 후 내보낼 수도 있다.

cv2.imwrite('저장하고 싶은 위치', 이미지 객체)

간단하다 역시, 저장하고 싶은 위치랑 이미지 객체를 넣어주면 저장하고 싶은 위치에 해당 객체가 이미지로 저장된다.

VideoCapture()

사진뿐만 아니라 영상을 받아올 수 있는데 이는 두가지의 콤보로 쓰인다.

cap = cv2.VideoCapture('man_output.mp4')
while True:
    retval, frame = cap.read()

이런 식으로 비디오를 받아오는데 비디오에는 프레임 만큼의 이미지가 존재해서 그걸 하나하나 출력해서 컴퓨터는 비디오를 표현한다.
capture로 불러오고, cap.read()로 읽어낸다.
이때, retval과 frame으로 정보를 받는데 retval은 받아왔는지에 대한 여부이고, frame은 말 그대로 프레임이다.
retval이 여부인 점을 활용해 retval이 0이면 break하는 것이 좋다.

cv2.imshow()

이미지나 frame을 받아왔으면 이제 시각화 해야한다. 데이터프레임에는 plt가 있었지만 cv2는 자체로도 시각화 모듈이기에 자체 함수가 있다.

바로

cv2.imshow('img', frame)

해당 함수는 우리가 받아온 이미지를 윈도우에 띄워준다. 이때 윈도우는 마이크로소프트의 윈도우가 아닌 우리가 프로그램을 실행하는 창을 뜻한다.

'img'에 넣은 이름으로 윈도우가 만들어지고 frame이 그안에서 보여진다.

다각형 만들기

cv2는 단순히 우리가 정보를 받아오는 것뿐만 아니라 편집도 가능한데 이를 가능케 하는 것들을 소개하겠다.

cv2.rectangle(img, pt1, pt2, (0, 0, 255), 2)
cv2.fillPoly(img, [pts1], color=(0, 0, 100))
cv2.circle(img, (cx1, cy1), radius=80, color=(255, 0, 0), thickness=6)
cv2.ellipse(img, (cx2, cy2), size, 30, 0, 360, (0, 255, 0), thickness=4)
cv2.polylines(img, [pts2], isClosed=True, color=(200, 0, 200))

이런 식으로 있는데 rectangle은 사각형을 그려준다.
fill poly은 pts1처럼 좌표가 주어지면 좌표를 모두 잇고 그 안을 채운다.
circle은 말 그대로 원을 만든다.
ellipse는 타원이다. 기존 원처럼 반지름이 모두 같지 않고 다른 경우다. 이때 각도, 시작점과, 끝점을 정해줄 수 있다.
polylines는 fillpoly와 같지만 내부를 채우지 않는다. 그렇기에 isClosed라는 옵션이 있는데
이는 poly에서 주어진 점(points)를 순서대로 읽는데 첫 시작점과 끝지점을 이을 것인지 말 것인지 이다. 두개를 잇는다면 도형이되겠지만 잇지 않으면 생각과 다른 도형이 될 가능성이 크다.

profile
코린코린이

0개의 댓글