signDetection.py
1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os
import math
import cv2
def setLabel(img, pts, label):
(x, y, w, h) = cv2.boundingRect(pts)
pt1 = (x, y)
pt2 = (x + w, y + h)
cv2.rectangle(img, pt1, pt2, (0, 255, 0), 2)
cv2.putText(img, label, (pt1[0], pt1[1]-3), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255))
# 지금 그레이스케일이 된 사진만 인식되는 묘한 경우임 코드 확인 필요
#이미지 불러오기 후 그레이스케일 변환 후 이진화
src = cv2.imread("shape.png", cv2.IMREAD_COLOR)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
ret, thr = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
contours, _ = cv2.findContours(thr, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cont in contours:
approx = cv2.approxPolyDP(cont, cv2.arcLength(cont, True)*0.02, True)
vtc = len(approx)
if vtc ==3:
setLabel(src, cont, 'Tri')
else:
area = cv2.contourArea(cont)
_, radius = cv2.minEnclosingCircle(cont)
ratio = radius*radius*math.pi / area
if int(ratio) ==1:
setLabel(src, cont, 'Cir')
cv2.imshow('img', src)
cv2.imshow('binary', thr)
cv2.waitKey()
cv2.destroyAllWindows()