-
adaptiveThreshold 함수 코드컴공지식/컴퓨터비전 2024. 10. 2. 22:46
void adaptiveThreshold(Mat src, Mat dst, double maxval, int adaptiveMethod, int thresholdType, int blockSize, double C)
이렇게 생겼다.
double maxval은 임계값을 넘었을 때 적용할 최대 값이고 보통 255로 둔다.
int adaptiveMethod은 임계값을 계산하는 방식인데 두 가지가 있다.
- ADAPTIVE_THRESH_MEAN_C: 주변 영역의 평균을 사용해 임계값을 계산
- ADAPTIVE_THRESH_GAUSSIAN_C: 가우시안 가중 평균을 사용해 임계값을 계산
int thresholdType은 이진화 방법이다. 주로 THRESH_BINARY(임계값을 넘으면 흰색, 아니면 검정)나 THRESH_BINARY_INV(반대) 중에 선택한다.
int blockSize는 임계값을 계산할 때 사용할 영역 크기다. 이 값이 커질수록 더 넓은 영역을 보고 계산한다. 값은 홀수여야 한다. (3, 5, 7 등)
blockSize가 3이면, 각 픽셀 주변 3x3 크기의 이웃 픽셀들로 평균을 계산한다.
double C는 계산된 임계값에서 뺄 값이다. 조정을 위해 이 값을 사용하는데, 값을 줄이면 더 어두운 결과가 나오고, 값을 키우면 더 밝은 결과가 나온다.
아래는 실제 사용 코드다.
int main() {
Mat image = imread("lena.png"); // 이미지를 읽어옴
cvtColor(image, image, CV_BGR2GRAY); // 컬러 이미지를 그레이스케일로 변환
Mat dst; // 결과 이미지를 저장할 변수
adaptiveThreshold(image, dst, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 10); // Adaptive Thresholding 적용
imshow("dst", dst); // 이진화된 이미지 보여줌
imshow("image", image); // 원본 그레이스케일 이미지 보여줌
waitKey(0); // 키 입력 대기
return 0;
}여기선 ADAPTIVE_THRESH_MEAN_C를 사용했다. 이건 픽셀 주변 영역의 평균값을 기준으로 임계값을 계산한다.
블록 사이즈는 7로 7x7 영역을 사용해 임계값을 계산한다.
'컴공지식 > 컴퓨터비전' 카테고리의 다른 글
Global Thresholding 구현 코드 (1) 2024.10.02 inRange 함수 (0) 2024.10.02 threshold 처리 코드 (0) 2024.10.02 GrabCut이란? (1) 2024.10.02 적응형 임계값(Adaptive Thresholding)이란 (0) 2024.10.02