import selectivesearch
_, regions = selectivesearch.selective_search(img_rgb, scale=100, min_size=2000)
print(type(regions), len(regions))
[출력] <class 'list'> 41
selectivesearch 모듈을 임포트한다.
img_rgb: 대상이되는 이미지들을 넣는다.
scale: scale이 클수록 큰 object위주로 알고리즘이 실행된다. 반대로 작을수록 작은 object위주로 알고리즘이 실행된다.
min_size: object 추천 최소사이즈. 위 코드에서는 2000으로 설정되어 있으니, 적어도 사이즈 2000이상만 추천해준다.
튜플 형식이다.
_ : 첫번째 튜플 값은 중요하지 않아서 언더바로 표시했다.
regions: dect할 object가 있을만한 공간이다.
type은 list이고 list안에 원소가 41개가 있는 것이다.
selective search로 찾아낸 object가 있을만한 공간이 41개라는 것이다.
반환된 regions 변수는 리스트 타입이다.
원소로 딕셔너리를 가지고 있다.
[{'labels': [0.0], 'rect': (0, 0, 107, 167), 'size': 11166},
regions의 첫 원소만 보면, 딕셔너리 형태이다.
'rect': (0, 0, 107, 167)
-> bounding box 정보이다.
'size': 11166
-> object의 size 이다.
{'labels': [7.0, 11.0], 'rect': (0, 91, 183, 175), 'size': 12312},
알고리즘을 돌리면서 유사한 label끼리 합쳐진다.
cand_rects = [cand['rect'] for cand in regions]
print(cand_rects)
rect 정보만 출력해서 볼 수 있다.
(시작w,시작h,끝w,끝h) 형태로 출력된다.
green_rgb = (125, 255, 51)
img_rgb_copy = img_rgb.copy()
for rect in cand_rects:
left = rect[0]
top = rect[1]
right = left + rect[2]
bottom = top + rect[3]
img_rgb_copy = cv2.rectangle(img_rgb_copy, (left, top), (right, bottom), color=green_rgb, thickness=2)
plt.figure(figsize=(8, 8))
plt.imshow(img_rgb_copy)
plt.show()
opencv에 rectangle이라는 사각형을 그려주는 함수가 있다.
color=green_rgb는 그 사각형의 색을 green으로 그려준다.
thickness=2 사각형 선의 두께이다.
위에서 구한 41개의 튜플이다.
노트북으로 작업해서 셀이 나뉘어져 있기 때문에 원본을 copy해둔것이다.
left = rect[0] 좌상단좌표, top = rect[1] 우상단좌표,
right = left + rect[2] 우하단좌표(좌상단좌표에서 더해줘야한다)
좌상단,우하단 좌표와 우상단,좌하단 자표가 들어가야한다.