컴공지식/컴퓨터비전

threshold 처리 코드

개강한 공대생 2024. 10. 2. 22:42

이렇게 생겼다

double threshold(Mat src, Mat dst, double thresh, double maxval, int type);

double thresh가 픽셀 값과 비교할 임계값이고

double maxval은 임계값을 넘는 픽셀에 할당될 값이다. 예를 들어 255 같은 값을 주면 흰색으로 변한다.

int type은 임계값 처리 방식이다. 아래와 같이 쓸 수 있다.

 

  • THRESH_BINARY: 임계값보다 크면 maxval, 작으면 0.
  • THRESH_BINARY_INV: 위와 반대로 임계값보다 작으면 maxval, 크면 0.
  • THRESH_TRUNC: 임계값보다 크면 그 픽셀 값을 임계값으로, 작으면 그대로 유지.
  • THRESH_TOZERO: 임계값보다 크면 그대로 두고, 작으면 0.
  • THRESH_TOZERO_INV: 위와 반대로 임계값보다 작으면 0, 크면 그대로 유지.

 

이건 Threshold Operation(임계값 처리)의 여러 종류를 시각적으로 보여주는 그래프다.

Value and Threshold Level: 이 첫 번째 라인은 임계값을 기준으로 값이 어떻게 배분되는지 보여주는 기본적인 선

Threshold Binary: 임계값을 넘는 값은 최댓값으로, 임계값보다 작은 값은 0으로 바뀜

Threshold Binary Inverted: 이건 위의 반대

Truncate: 임계값보다 큰 값은 임계값으로 잘리고, 작은 값은 그대로 유지

Threshold to Zero, Inverted: 임계값보다 작은 값은 0으로 바뀌고, 큰 값은 그대로 유지

Threshold to Zero: 이건 반대로, 임계값보다 큰 값은 유지되고 작은 값만 0으로

 

다음은 코드 사용 예다.

int main() {
    Mat image = imread("lena.png"); // 이미지를 불러옴
    cvtColor(image, image, CV_BGR2GRAY); // 컬러 이미지를 그레이스케일로 변환
    Mat dst; // 결과 이미지를 저장할 변수
    threshold(image, dst, 100, 255, THRESH_BINARY); // 임계값 처리 (임계값: 100, 최댓값: 255, 이진화)
    
    imshow("dst", dst); // 이진화된 이미지 출력
    imshow("image", image); // 원본 이미지 출력
    waitKey(0); // 키 입력 대기
    return 0;
}

 

threshold(image, dst, 100, 255, THRESH_BINARY)를 보면 픽셀 값이 100보다 크면 255(흰색)으로 바꾸고, 100보다 작으면 0(검은색)으로 바꾼다. THRESH_BINARY 방식이니까 완전한 흑백 이미지가 나온다.