Program/OPEN_CV

[Open CV] OpenCV-Python 기초 사용법 _ OpenCV 그리기 함수

사막여유 2022. 4. 28. 21:18
728x90

 

OpenCV에는 영상 데이터 위에 선이나 도형 텍스틀 그릴 수 있는 기능이 있다.

여기서 중요한건 직선 도형 문자열을 사용할때 영상데이터 자체를 변경을 한다는 점이다.

그래서 영상데이터가 훼손이 될수있기때문에 원본데이터를 백업하고 복사본을 만들어 그 위에 그리는 것이 좋다. 

그리고 컬러 도형이나 선을 그리고싶을때에는 영상자체가 컬러 영상이어야지만 동작을 한다.

 

 

위 코드를 실행하면 아래 영상이 생성되는데

 

 

위 영상에서 사용된 함수들을 설명하면

 

 - img = np.full ( (400,400,3),255,np.uint8 

400 x 400 의 RGB성분을 가진 버퍼를 생성하고 모든 RGB값이 255인 영상을 uint8 크기의 형으로 생성한다.

 

- 직선그리기 ( cv2.line ) 

영상, 시작점과 끝점 , 선 색상, 선두께 , 선 타입 , shift 등의 인자를 갖고있는데

인자 이름처럼 크게 어려울건 없지만 shift의 인자는 거의 사용하지 않기때문에 추후에 설명하려한다.

 

 - 사각형 그리기 ( cv.rectangle )

 위 Rectangle 함수는 2가지 함수로 오버라이딩 되어있는데 

그림그릴 영상 , ( 사각형 두꼭지점 좌표 or 사각형 위치정보 ) , 선색상 밝기, 선 두께, 선 타입,

그리기 좌표값의 축소비율의 인자로 구성되어있다. 

그리고 사각형 그리기에서는 선 두께에 -1 값을 넣어주게되면 내부가 채워진다.

 

 - 원 그리기 ( cv.circle )

그림그릴영상 , 원의 중심좌표, 원의 반지름, 선색상 또는 밝기 , 선두께 , 선타입, shift의 인자들로 구성되어있는데 직선그리기처럼 크게 어려울 것 없이 사용할 수 있다.또한 선 두께에 -1을 입력하게되면 내부를 채울 수 있다.

 * 그리고 원은 라인 타입이 중요한데 cv2.LINE_8의 타입을 사용하고 줌을 하게되면

   원의 라인이 거친듯한 느낌을 받을 수 있는데 이는 cv2.LINE_AA의 타입을 사용하면 해결할 수 있다.

 

 - 다각형 그리기 ( cv.polylines )그림을 그릴 영상 , 다각형 외곽점들의 좌표배열 ( numpy.ndarray의 리스트 ) , 폐곡선 여부, 선색상, 선두께 , 선타입 , shift 다각형 외곽점들의 좌표배열은  2차원 행렬  pts = np.arrary([[250,200],[300,200],...) 이라고 되어있다면

 * polyline의 함수를 사용할때는 [pts]라는 리스트 형태로 사용해야 한다.

또한 다각형도 대각선이 들어가게된다면 라인타입을 LINE_AA로 사용하는게 좋다.

 

- 문자열 출력 ( cv.putText그림을 그릴 여상 , 출력할 문자열 , 영상에서 문자열을 출력할 위치의 좌측 하단 좌표, 폰트종류 , 폰트 크기, 선색상 , 선 두께 , 선 타입 , bottomLeftOrigin ( True면 영사의 좌측 하단을 원점으로 간주 )문자열은 한글은 지원하지 않고 영어와 숫자만 지원한다.

그리고 문자열은

text = 'Hello? OpenCV ' 처럼 변수에 문자를 입력해주면 문자열로 지정된다.

또한 문자열도 라인 타입은 LINE_AA 로 사용하는 것이 좋다.

 

 

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

https://bit.ly/3L3avNW

 

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

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

fastcampus.co.kr

 

728x90