반응형
아래 처럼 단순 별모양 이미지에서 외곽선, 최 내부의 꼭지점, 최 외곽의 블록성(Convexity)를 탐지 한다.
외곽선(Contour) 탐지
블록성 결함. (Convexity Defects) : Contour 라인에서 블록체가 되지 못하게 오목하게 들어간 부분 탐지
코드 사용을 위해서는 opencv, numpy 라이브러리를 설치해야 한다.
또한 위와같이 'star.jpg' 또는 아무 이미지를 사용해야 한다.
테스트한 이미지는 흑백의 구분이 편한 이미지를 사용했다.
다른 색상 있는 일반이미지는 threshold를 통해 흑백으로 원하는 부분을 추출해서 사용해야 잘 먹힌다.
반응형
import cv2
import numpy as np
img = cv2.imread('star.jpg') # 이미지 불러오기
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 이미지 그레이 전환
ret, thresh = cv2.threshold(imgray, 120, 255, 0) # 흑과 백으로 임계(threshold) 분할
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # contour(외곽선)를 찾아냄.(연속된 좌표점)
cv2.drawContours(img, contours, -1, (0, 255, 0), 2) # contour(외곽선)을 그림, 초록색(0 255 0), 두께 2로
cnt = contours[0] # cnt변수에 Contour[0]에 있는 2차원 연속된 좌표를 넣음.
# 윤곽(convex)정보 휙득
hull = cv2.convexHull(cnt, returnPoints=False)
defects = cv2.convexityDefects(cnt, hull) #
for i in range(defects.shape[0]):
s, e, f, d = defects[i, 0]
start = tuple(cnt[s][0])
end = tuple(cnt[e][0])
far = tuple(cnt[f][0])
# 바깥 최 외곽선을 이은 line 표시 (파랑색)
cv2.line(img, start, end, [255, 0, 0], 2)
# 내부의 꼭지점에 좌표점 표시 (빨간색)
cv2.circle(img, far, 5, [0, 0, 255], -1)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
이미지 확대 축소 관련
https://ansan-survivor.tistory.com/641
반응형
'파이썬(python) > Python OpenCV' 카테고리의 다른 글
[Python OpenCV] 파이참(Pycharm)에서 OpenCV 라이브러리 설치하기 (영상처리 라이브러리 설치) (0) | 2021.10.03 |
---|---|
[Python OpenCV] 파이썬 이미지 비틀기 휘게하기, 이미지 왜곡하기 (0) | 2021.05.02 |
[Python OpenCV] 파이썬 이미지 회전하기, 확대 축소 하기 (0) | 2021.05.02 |
[Python OpenCV] 파이썬 두 이미지 합치기, 두 이미지 합성 시키기 (RGB값 더하기) (0) | 2021.05.02 |
[Python OpenCV] 파이썬 영상 추출하기, 회색(gray)으로 배경 변경하기 (0) | 2021.05.02 |