본문 바로가기
IT 프로그래밍 관련/OpenCV

OpenCV Image에 선 그리기 (ImageDraw)

by 지나는행인 2021. 4. 20.
728x90

이미지에 여러가지 선과 글씨를 넣는 방법이다.

 

기본적으로 색을 표현할때 타 라이브러리는 다 RGB 의 형식으로 되어있는데 반해, 

 

OpenCV 는 특이하게 BGR 의 형식으로 되어있어 , 색을 표현할때 형식에 맞춰야하니 주의한다.

 

 

1. 직선그리기 

1
2
3
4
5
6
7
8
9
10
11
import cv2
import numpy as np
 
 
image = cv2.imread('data/images/mark.jpg')
cv2.imshow('img', image)
 
imageLine = image.copy()
# 선그리기
cv2.line(imageLine, (322,179), (400,183), (0,255,0), thickness=2, lineType=cv2.LINE_AA)
cv2.imshow('image line', imageLine)
cs

* cv2.line( img, start, end, color, thickness ) 

- img : 그림을 그릴 이미지 파일

- start : 선이 시작되는 시작점 좌표 ex) ( 0, 0 )

- end : 선이 종료되는 종료 좌표 ex) (400,400)

- color : 선의 색 *BGR 형식  ex) ( 255, 0, 0 )  <-- blue

- thickness : 선의 두께 

- lineType : cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA 중 선택

* cv2.line 실행 후 비교 화면

 

2. 원 그리기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
import numpy as np
 
 
image = cv2.imread('data/images/mark.jpg')
cv2.imshow('img', image)
 
imagecircle = image.copy()
 
cv2.circle(imageCircle,(350,200), 150, (255,0,0), thickness=3, lineType=cv2.LINE_AA)
cv2.imshow('image circle', imageCircle)
 
cv2.waitKey(0)
cv2.destroyAllWindow()
cs

*cv2.circle(img, center, radian, color, thickness)

- img : 그림을 그릴 이미지 파일

- center : 원의 중심 좌표  ex) ( 350, 200 )

- radian : 원의 반지름 

- color : BGR 형태의 색깔

- thickness = 선의 두께  (  -1 설정시 원의 안쪽으로 색이 채워짐  )

- lineType : cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA 중 선택

*cv2.line 실행 후 비교화면

 

3. 타원그리기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2
import numpy as np
 
 
image = cv2.imread('data/images/mark.jpg')
cv2.imshow('img', image)
 
imageellipse = image.copy()
 
cv2.ellipse(imageELLipse, (360,200), (100,170), 450360, (0,255,0), thickness=2 )
cv2.ellipse(imageELLipse, (360,200), (100,170), 1350360, (0,0,255), thickness=2 )
cv2.imshow('image ellipse', imageELLipse)
 
cv2.waitKey(0)
cv2.destroyAllWindow()
cs

* cv2.ellipse( img, center, axes, angle, startAngle, endAngle, color, thickness ) 

- img 그림을 그릴 이미지 파일

- center – 타원의 중심좌표

- axes – 중심에서 가장 큰 거리와 작은 거리  ex) ( 100, 170 )

- angle – 타원의 기울기 각

- startAngle – 타원의 시작 각도

- endAngle – 타원이 끝나는 각도

- color – 타원의 색  

- thickness – 선 두께 -1이면 안쪽을 채움

 

 

 

4. 사각형 그리기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
import numpy as np
 
 
image = cv2.imread('data/images/mark.jpg')
cv2.imshow('img', image)
 
imageRectangle = image.copy()
 
cv2.rectangle(imageRectangle, (208,55), (450,355), (255,0,0), thickness=3)
cv2.imshow('rectangle', imageRectangle)
 
cv2.waitKey(0)
cv2.destroyAllWindow()
cs

* cv2.rectangle( img, start, end, color, thickness )

- img : 그림을 그릴 이미지

- start : 시작 좌표 ( 왼쪽 윗 모서리 좌표 )

- end : 종료 좌표 ( 오른쪽 아래 모서리 좌표 )

- color : BGR형태의 Color

- thickness (int) : 선의 두께

* cv2.rectangle 실행 화면

 

 

5. Text 넣기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2
import numpy as np
 
 
image = cv2.imread('data/images/mark.jpg')
cv2.imshow('img', image)
 
imageText = image.copy()
 
 
cv2.putText(imageText, 'Mark Zuckerberg', (205,50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0),2 ) 
cv2.imshow('text', imageText)
 
cv2.waitKey(0)
cv2.destroyAllWindows()
 
cs

* cv2.putText(img, text, org, font, fontScale, color, thickness)

- img : 문자를 넣을이미지

- text :  넣을 문자열

- org : 문자열이 시작될 위치 좌표 ex) (205,50)  , 문자열의 왼쪽 아래 모서리점.

- font : font 타입 , cv2.FONT_*****

- fontScale : font Size

- color : font color

- thickness : 문자열 선 두께

* cv2.imshow( 'text' , imageText)

 

댓글