1.5 다각형

 

1.5.1 polylines()

 

polylines() 함수는 원하는 만큼의 좌표 점을 설정하여 선을 그을 있고 시작점과 끝점을 자동 또는 수동으로 연결하여 다각형을 그릴 수도 있습니다.

 

cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) → img


parameter

 내용

 img

 이미지 파일

 pts

 좌표 점들 (x, y)

 isClosed

 도형의 닫힘 유무 (True, False)

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

# 점 좌표 설정

points1 = np.array([[10, 10], [170, 10], [200, 230], [70, 70], [50, 150]], np.int32)

points2 = np.array([[110, 110], [270, 110], [300, 330], [170, 170], [150, 250]], np.int32)

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

# 그리기

img = cv2.polylines(img, [points1], False, blue_color, 2)  # 열린 도현

img = cv2.polylines(img, [points2], True, green_color, 2)  #닫힌 도형

 

cv2.imshow('polylines',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


opencv_polyline


1.5.2 fillConvexPoly()

 

여러 점의 좌표를 이용 하여 채워진 볼록 다각형을 그립니다.   채워진 다각형이기 때문에 선 두께가 필요 없습니다.


cv2.fillConvexPoly(img, pts, color[, lineType[, shift]]) → img


parameter

 내용

 img

 이미지 파일

 pts

 좌표 점들 (x, y)

 color

 색상 (blue, green, red) 0 ~ 255

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)



- 볼록 다각형 그리기


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

# 점 좌표 설정

pt1 = np.array([[110, 110], [270, 110], [300, 330], [170, 350], [100, 250], [50, 150]], np.int32)

# 볼록 다각형 그리기

img = cv2.fillConvexPoly(img, pt1, white_color)

 

cv2.imshow('fillConvexPoly',img)

cv2.waitKey(0)

cv2.destroyAllWindows() 


opencv_polyline


 

- 오목 다각형 그리기


오목 다각형을 fillConvexPoly() 함수로 그리면 조금 다른 모양으로 나타납니다.


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

# 좌표 설정

pt1 = np.array([[110, 110], [270, 110], [300, 330], [170, 170], [150, 250]], np.int32)

# 오목 다각형 그리기

img = cv2.fillConvexPoly(img, pt1, white_color)

img = cv2.polylines(img, [points2], True, green_color, 2)  #닫힌 도형

 

cv2.imshow('polylines',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


비교를 하기 위해 fillConvexPoly() 흰색으로 그리고 위에 녹색으로 polylines() 그려보았습니다.


opencv_polyline


1.5.3 fillPoly()


채워진 다각형을 그립니다. pts에 다각형 배열 값을 여러 개 입력할 수도 있습니다.

 

cv2.fillPoly(img, pts, color[, lineType[, shift[, offset]]]→ img


parameter

 내용

 img

 이미지 파일

 pts

 좌표 점들 (x, y)

 color

 색상 (blue, green, red) 0 ~ 255

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)

 offset 모든 contour 점들의 offset


- fillPoly()에 다각형 좌표 배열을 한 개만 적용한 경우


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# points 설정

points1 = np.array([[10, 10], [170, 10], [200, 230], [70, 70], [50, 150]], np.int32)

points2 = np.array([[110, 110], [270, 110], [300, 330], [170, 170], [150, 250]], np.int32)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

# 그리기

img = cv2.fillPoly(img, [points1], blue_color)

img = cv2.fillPoly(img, [points2], green_color)

 

cv2.imshow('fillPoly',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


opencv_polyline


- fillPoly()에 다각형 좌표 배열을 여러 개 적용한 경우 겹치는 부분이 사라집니다.


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# points 설정

points1 = np.array([[10, 10], [170, 10], [200, 230], [70, 70], [50, 150]], np.int32)

points2 = np.array([[110, 110], [270, 110], [300, 330], [170, 170], [150, 250]], np.int32)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

# 그리기

img = cv2.fillPoly(img, [points1, points2], green_color)

#img = cv2.fillPoly(img, [points2], green_color)

 

cv2.imshow('fillPoly',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


opencv_polyline



1.5.4 ellipse2Poly()


delta 각에 의하여 연결되는 선들을 이용하여 타원을 그리는 함수로 delta 값이 작을 수로 좀더 원에 가까운 다각형을 그릴 수 있습니다. ellipse2Poly() 함수의 파라미터 중 delta를 제외하고는 타원을 그리는 요소들 그대로 입니다즉 원을 면저 그리고 delta를 이용하여 그 원에 접하는 선들 의 좌표 값을 구하게 됩니다.  delta 값이 작을 수로 원에 가까운 좌표들을 얻을 수 있습니다.


cv2.ellipse2Poly(center, axes, angle, arcStart, arcEnd, delta) → pts


parameter

 내용

 center

 타원의 중심 좌표(x, y)

 axes

 축의 절반 길이(x, y)

 angle

 타원의 회전 각도

 arcStart

 선의 좌표를 구하는 시작 각도

 arcEnd

 선의 좌표를 구하는 종료 각도
 delta

 타원의 회전 각도

 pts 타원에 접하는 선의 좌표 값들


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

pt1 = cv2.ellipse2Poly((200, 200), (100, 160), 0, 0, 360, 50)

pt2 = cv2.ellipse2Poly((200, 200), (100, 160), 0, 0, 360, 30)

img = cv2.ellipse(img, (200, 200), (100, 160), 0, 0, 360, white_color, 2)

img = cv2.polylines(img, [pt1], False, green_color, 2)

img = cv2.polylines(img, [pt2], False, red_color, 2)

 

print(pt1)

 

cv2.imshow('polylines',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


- pt1의 좌표 값만 출력해 보았습니다.  각도가 작아질 수록 개수가 많아집니다.

[[300 200]

 [264 323]

 [183 358]

 [113 280]

 [106 145]

 [166  50]

 [250  61]

 [298 172]

 [300 200]]


opencv_polyline


- 시작, 종료 각도


타원의 내부에서 각도를 설정하여 일부분의 좌표 값들을 리턴 받을 수 있습니다.


pt1 = cv2.ellipse2Poly((200, 200), (100, 160), 0,   0, 180, 50)

pt2 = cv2.ellipse2Poly((200, 200), (100, 160), 0, 180, 360, 30)


opencv_polyline


- 타원의 회전


타원이 회전된 경우 내접하는 좌표를 구해 봅니다.


pt3 = cv2.ellipse2Poly((200, 200), (100, 160),  0, 0, 360, 50)

pt1 = cv2.ellipse2Poly((200, 200), (100, 160), 45, 0, 360, 50)

pt2 = cv2.ellipse2Poly((200, 200), (100, 160), 90, 0, 360, 30)

 

img = cv2.ellipse(img, (200, 200), (100, 160), 0, 0, 360, white_color, 2)

img = cv2.polylines(img, [pt1], False, green_color, 2)

img = cv2.polylines(img, [pt2], False, red_color, 2)

img = cv2.polylines(img, [pt3], False, blue_color, 2)


opencv_polyline


1.3


원은 복잡하지 않아 중심 점과 반지름만 정해주면 그릴 수 있습니다.

cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) → img


parameter 

 내용

 img

 이미지 파일

 center

 원의 중심 좌표(x, y)

 radius

 원의 반지름

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


중심과 반지름을 정하고 선의 두께를 조금씩 변경해서 그립니다.


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

img = cv2.circle(img, (50, 50), 50, blue_color, 5)

img = cv2.circle(img, (150, 150), 50, green_color, 10)

img = cv2.circle(img, (210, 210), 60, red_color, 15)

 

cv2.imshow('circle',img)

cv2.waitKey(0)

cv2.destroyAllWindows()



opencv_circle_ellipse


- 안쪽을 채운 원

 

두께값을 -1로 하면 내부가 채워진 원을 그립니다.


img = cv2.circle(img, (50, 50), 50, blue_color, -1)

img = cv2.circle(img, (150, 150), 50, green_color, -1)

img = cv2.circle(img, (210, 210), 60, red_color, -1)



opencv_circle_ellipse



1.4 타원


ellipse() 함수는 2개가 있으며 그리는 방식에 차이가 있습니다.

 

- 회전 각도 설정

 

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) → img


parameter

 내용

 img 이미지 파일

 center

 타원의 중심 좌표(x, y)

 axes

 축의 절반 길이(중심에서 긴 거리, 짧은 거리)

 angle

 타원의 기울기

 startAngle

 타원을 그리는 시작 각도

 endAngle

 타원을 그리는 종료 각도

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


parameter에서 axes만 알아보면 타원이 두개의 축으로 긴쪽과 짧은 쪽이 있는데 이 두 축 길이의 반을 의미 합니다실제로 사용 할때는(x축 방향 길이, y축 방향 길이)로 표현 합니다.  하단 예제를 보면 (50, 50), (50, 20), (20, 50)으로 표현이 됩니다.

각도를 부여하면 타원을 회전 시킬 수 있습니다. (+)의 각도는 시계 방향으로 회전 합니다.


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

img = cv2.ellipse(img, (60,  70), (50, 50), 0, 0, 360, blue_color, 2)

img = cv2.ellipse(img, (170, 70), (50, 20), 0, 0, 360, green_color, 2)

img = cv2.ellipse(img, (290, 70), (20, 50), 0, 0, 360, red_color, -1)

# (+)의 각도 변환

img = cv2.ellipse(img, (60,  180), (50, 20), 0, 0, 360, green_color, 2)

img = cv2.ellipse(img, (170, 180), (50, 20), 45, 0, 360, green_color, 2)

img = cv2.ellipse(img, (290, 180), (50, 20), 90, 0, 360, green_color, -1)

# (-)의 각도 변환

img = cv2.ellipse(img, (60,  290), (50, 20),   0, 0, 360, red_color, 2)

img = cv2.ellipse(img, (170, 290), (50, 20), -45, 0, 360, red_color, 2)

img = cv2.ellipse(img, (290, 290), (50, 20), -90, 0, 360, red_color, -1)

 

cv2.imshow('ellipse',img)

cv2.waitKey(0)

cv2.destroyAllWindows() 




opencv_circle_ellipse


- 선을 그리는 각도 설정


타원을 그릴 때 닫힌 선이 아닌 중간이 끊어진 타원을 그리는 방법 입니다.  선의 시작 각도와 종료 각도를 정해주면 타원의 일부만 그리기가 가능 합니다.


 import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

img = cv2.ellipse(img, (60,  70), (50, 50), 0,   0,  90, blue_color, 2)

img = cv2.ellipse(img, (170, 70), (50, 50), 0,  90, 180, blue_color, 2)

img = cv2.ellipse(img, (290, 70), (50, 50), 0, 180, 360, blue_color, 2)

(+)의 각도 변환

img = cv2.ellipse(img, (60,  180), (50, 50), 0,  90, 360, green_color, 2)

img = cv2.ellipse(img, (170, 180), (50, 50), 0, 180, 360, green_color, 2)

img = cv2.ellipse(img, (290, 180), (50, 50), 0,   0, 180, green_color, 2)

(-)의 각도 변환

img = cv2.ellipse(img, (60,  290), (50, 20), 0, 0,   90, red_color, -1)

img = cv2.ellipse(img, (170, 290), (50, 20), 0, 0,  180, red_color, -1)

img = cv2.ellipse(img, (290, 290), (50, 20), 0, 90, 360, red_color, -1)

 

cv2.imshow('ellipse',img)

cv2.waitKey(0)

cv2.destroyAllWindows()




opencv_circle_ellipse


- 사각형 안쪽 타원

 

사각형의 내부에 선을 그리는 형태로 타원을 그리는 방식 입니다.

 

cv2.ellipse(img, box, color[, thickness[, lineType]]) → img


parameter 

 내용

 img

 이미지 파일

 box

 회전 사각형

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

img = cv2.rectangle(img, (50, 100), (250, 200), white_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 0), blue_color, 2)

 

cv2.imshow('ellipse',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


사각형은 이해를 돕기위해 그린것 입니다.


opencv_circle_ellipse


- 사각형 회전

 

사각형에 회전 각도를 부여하고 회전된 사각형 내부에 타원을 그립니다.


img = cv2.rectangle(img, (50, 100), (250, 200), white_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 0), blue_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 45), green_color, 2)

img = cv2.ellipse(img, ((150, 150), (200, 100), 95), red_color, 2) 

 

opencv_circle_ellipse


1.2 사각형


rectangle() 함수를 이용하여 사각형을 그릴 수 있습니다. rectangle은 모서리의 각이 모두 직각(90)인 사각형이므로 시작점(좌측 상단)과 종료점(우측 하단) 두곳의 좌표만 기입하여 도형을 그립니다.

 

cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img


parameter

 내용

 img

 이미지 파일

 pt1

 시작점 좌표 (x, y)

 pt2

 종료점 좌표 (x, y)

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


1.2.1 rectangle() 사각형 그리기


시작점의 좌표와 종료점 좌표를 기입하면 직각 사각형을 그릴 수 있습니다.


opencv_rectangle


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

img = cv2.rectangle(img, (10, 10), (100, 100), blue_color, 3)

img = cv2.rectangle(img, (110, 110), (200, 200), green_color, 3)

img = cv2.rectangle(img, (210, 210), (350, 350), red_color, 3)

 

cv2.imshow(‘rectangle’,img)

cv2.waitKey(0)

cv2.destroyAllWindows()


opencv_rectangle


- 채워진 사각형


외곽선의 두께에 -1 값을 주게 되면 내부가 색칠된 사각형을 얻을 수 있습니다.


img = cv2.rectangle(img, (10, 10), (100, 100), blue_color, -1)

img = cv2.rectangle(img, (110, 110), (200, 200), green_color, -1)

img = cv2.rectangle(img, (210, 210), (350, 350), red_color, -1)



opencv_rectangle



1.2.2 clipLine() 사각형 내 직선


cv2.clipLine(imgRect, pt1, pt2) → retval, rpt1, rpt2


parameter

 내용

 imgRect

 검출 하려는 직사각형 영역

 pt1

 직선의 시작점

 pt2

 직선의 종료점

 retval

 결과. True : 사각형 내에 선이 있음, False : 사각형 내에 선이 없음

 rpt1

 사각형 안에 있는 선의 시작점

 rpt2

 사각형 안에 있는 선의 종료점


clipLine() 함수는 직사각형 영역 내에 직선이 존재하는 경우 시작 위치와 종료 위치의 좌표를 얻기 위해 사용 합니다직사각형을 그리고 직선을 그어서 교차점이 어디인지 확인해 보겠습니다.


opencv_rectangle


opencv_rectangle


결과 값이

True (50, 50) (350, 350)


직선이 사각형 내에 있고 직선의 시작 위치와 종료 위치가 표시 됩니다.

 

- 도형 없이 실행


도형은 좌표를 알기 위해 시각화 한 것 뿐입니다. 도형을 주석처리하고 다시 실행해 봅니다.


opencv_rectangle


opencv_rectangle


도형으로 시각화 하지 않아도 사각형 내에 있는 선의 시작, 종료 좌표를 구할 수 있습니다.


- 도형과 관계 없는 좌표


도형은 위의 예처럼 그리고 실제 구하려는 사각형 내의 직선의 시작 위치는 변경을 해보겠습니다그러면 사각형 내에 있는 직선의 시작점과 종료점을 구하게 됩니다.


opencv_rectangle


opencv_rectangle


결과 값

True (60, 60) (350, 350)


retval, pt1, pt2 = cv2.clipLine((50, 50, 350, 350), (60, 60), (350, 350))

clipLine() 함수에 있는 사각형 내부에 존재하는 직선의 시작점과 종료점 값을 잘 구하고 있습니다.



1. 도형 그리기

 

도형을 그리려면 캔버스와 같은 대상이 있어야 하기 때문에 필요한 크기의 배열을 만들어서 거기에 도형을 그리고 화면에 출력 하면 됩니다배열은 numpyzeros() 함수를 이용하여 생성 합니다.


numpy.zeros(shape[, dtype=float, order='C'])


zeros() 함수는 shapedtype으로 정의된 형태의 zero로 채워진 배열을 리턴 합니다.

Parameter 

내용 

 shape

 int를 이용한 배열, int가 요소인 튜플을 이용한 다차원 배열

 dtype

 자료형 numpy.int8, numpy.float64

 order

 데이터 저장 순서.  C : row-major,  F : column-major 


도형을 그리는 좌표는 좌측 상단이 (0, 0)이 됩니다.  x축은 오른쪽으로 증가 하지만 y측은 아래로 내려가면서 증가 합니다.

(50, 50) 좌표에서 (450, 450) 까지 선을 그었을 경우 그림처럼 선은 좌측 상단에서 우측 하단으로 이어집니다.


opencv_line


zeros()255를 더하면 배경 색을 흰색으로 변경 가능 합니다.


opencv_line


이제 도형을 그릴 수 있는 준비가 된것 같습니다.



1.1 , 직선



line() 함수를 이용하여 두 좌표를 잇는 선을 그을 수 있습니다점은 두 좌표를 동일 하게 하면 됩니다.


cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img


Parameter

 내용

 img

 이미지 파일 

 pt1

 시작점 좌표 (x, y)

 pt2

 종료점 좌표 (x, y)

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)


opencv_line


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

img = cv2.line(img, (10, 10), (350, 10), blue_color, 5)

img = cv2.line(img, (10, 30), (350, 30), green_color, 5)

img = cv2.line(img, (10, 50), (350, 50), red_color, 5)

# line_4

img = cv2.line(img, (10, 90), (350, 90), blue_color, 5, 4)

# line_aa

img = cv2.line(img, (10, 110), (350, 110), green_color, 5, cv2.LINE_AA)

# shift 1

img = cv2.line(img, (10, 130), (350, 130), red_color, 5, 4, 1)

#

img = cv2.line(img, (150, 150), (150, 150), red_color, 5)

 

cv2.imshow('image',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


색상별 3개의 선, line 종류별 1개씩, 그리고 shift를 적용하여 직선을 그렸습니다점은 두께 5의 선으로 표현 한 경우의 모습입니다점이라 하기는 그렇지만 동일 좌표로 점도 하나 찍어 보았습니다.


opencv_line


배경 색상을 하얀색으로 하기 위해

img = np.zeros((384, 384, 3), np.uint8) + 255

를 적용한 경우.


opencv_line


배경 색상은 255에서 0사이의 값을 주면 흰색에서 검은색 까지 변경을 시킬 수 있습니다.

img = np.zeros((384, 384, 3), np.uint8) + 222

를 적용한 경우.


opencv_line


- arrowedLine()


화살표가 있는 선을 그립니다파라미터는 line() 함수와 동일 한데 마지막에 화살표의 크기를 설정하는 tipLength가 하나 더 있습니다.

 

cv2. arrowedLine(img, pt1, pt2, color, thickness=1, line_type=8, shift=0, tipLength=0.1)


Parameter

 내용

 img

 이미지 파일 

 pt1

 시작점 좌표 (x, y)

 pt2

 종료점 좌표 (x, y)

 color

 색상 (blue, green, red) 0 ~ 255

 thickness

 선 두께 (default 1)

 lineType

 선 종류 (default cv.Line_8)

 - LINE_8 : 8-connected line

 - LINE_4 : 4-connecterd line

 - LINE_AA : antialiased line

 shift

 fractional bit (default 0)

 tipLength 화살표 크기


import numpy as np

import cv2

 

# color 설정

blue_color = (255, 0, 0)

green_color = (0, 255, 0)

red_color = (0, 0, 255)

white_color = (255, 255, 255)

 

# 모두 0으로 되어 있는 빈 Canvas(검정색)

img = np.zeros((384, 384, 3), np.uint8)

 

cv2.arrowedLine(img, (50, 50), (250, 250), green_color, thickness=2)

cv2.arrowedLine(img, (50, 250), (250, 50), white_color, thickness=20, tipLength=0.1)

cv2.arrowedLine(img, (90, 340), (340, 90), white_color, thickness=20, tipLength=0.5)

 

 

cv2.imshow('arrowedLine',img)

cv2.waitKey(0)

cv2.destroyAllWindows()


opencv_line



- cv2.imshow('window title', image name)

 

여기서 오류가 발생한다는 의견이 있어서 추가로 작성해 드립니다.

이 함수는 그려진 이미지를 출력하는 기능입니다. 'window title'은 자유롭게 기입이 가능하고 입력을 하지 않아도 문제가 되지 않습니다.  


opencv line 그리기


이렇게 윈도우 창 타이틀이 없이 나옵니다.

 

오류가 발생 한다면 이 함수는 cv2.waitKey(0)와 함께 사용해야 작동을 합니다.  cv2.waitKey(0)를 생략하면 어떻게 나오느냐 하면


opencv line 그리기


이렇게 응답 없음으로 나옵니다.  코드는 아래처럼 wailKey()destroy…()도 주석으로 해서 테스트 해봅니다.

opencv line 그리기


오류가 나고 jupyter 커널도 재시작 합니다.


12345

+ Recent posts