반응형
이진화, 사진을 두가지(흑, 백)으로만 분류하는 것입니다.
이진화는 왜 할까?
경계값을 기준으로 이진화시키면 물체가 뚜렷해지기 때문이다.
- 이진화 input : 임계값, 최댓값
* cv2.THRESH_BINARY옵션에서
임계값이하의 pixel은 rgb = (0,0,0) =검정으로 변환되며, 임계값 초과의 pixel은 설정한 최댓값으로 변환된다.
image =cv2.imread('./sampleData/sample2.jpg', cv2.IMREAD_GRAYSCALE) # 이미지 파일 불러오기.
divider = 4
dst = cv2.resize(image, dsize=(int(image.shape[1]//divider),
int(image.shape[0]//divider)), interpolation=cv2.INTER_AREA)
ret, dst3 = cv2.threshold(dst, 170, 200, cv2.THRESH_BINARY) # ret에는 임계값, dst3에는 결과image
cv2.imshow("binary", dst3)
cv2.waitKey(0)
* 다양한 이진화 옵션
cv2.THRESH_BINARY | 임계값 이상 = 최댓값, 임계값 이하 = 0 |
cv2.THRESH_BINARY_INV | 위의 반전, 임계값 이상 = 0, 임계값 이하 = 최댓값 |
cv2.THRESH_TOZERO | 임계값 이상 = 원본값, 임계값 이하 = 0 |
cv2.THRESH_TOZERO_INV | 위의 반전, 임계값 이상 = 0, 임계값 이하 = 원본값 |
cv2.THRESH_TRUNC | 임계값 이상 = 임계값 임계값 이하 = 원본값 |
cv2.THRESH_MASK | 흑색 이미지로 |
cv2.THRESH_OTSU | otsu 알고리즘 |
cv2.THRESH_TRIANGLE | triangle 알고리즘 |
* OTSU 이진화 : 입력 영상이 배경과 객체 두가지로 구성된 경우 활용 가능. Bimodal histogram.
임의의 임계값 T에 의해 나눠지는 두 픽셀 분포의 분산이 최소가 되는 T를 선택하는 방법.
전체 이미지에 동일한 threshhold를 적용하다보니, 그림자가 존재하는 경우 원하는 대로 이미지가 나오지 않는다는 것을 추측해볼 수 있다. 이를 어떻게 해결할 수 있을까?
참고
https://deep-learning-study.tistory.com/224
반응형
'OpenCV' 카테고리의 다른 글
[OpenCV] Kotlin에서 OpenCV사용하기- 설정(feat. Android Studio) (0) | 2023.01.10 |
---|---|
[OpenCV] 이미지 히스토그램 - calcHist (0) | 2023.01.10 |
[Open CV] 이미지 다루기- imread, imshow, waitkey, resize (0) | 2023.01.07 |
댓글