OpenCV(C++)로 지정 범위 부분만 이진화

소개



OpenCV (C++)에서 2 치화를 아무렇지도 않게 실시하고 있었지만, 이제 자신의 이해가 잘못되었다는 것을 깨달았다.
그래서 어쩌면 다른 사람도 착각하고 있을지도 생각해, 참고가 되면 좋다고 생각한다.

Threshold 함수



이진화를 수행하는 데 사용되는 Threshold 함수.
문서에는 이렇게 적혀 있습니다.

double threshold(const Mat& src, Mat& dst, double thresh, double maxVal, int thresholdType)

配列の要素に対して,ある定数での閾値処理を行います.

パラメタ:   
src  入力配列(シングルチャンネル,8ビット,あるいは32ビット浮動小数点型).
dst  src と同じサイズ,同じタイプの出力配列.
thresh  閾値.
maxVal  閾値処理の種類が THRESH_BINARY  THRESH_BINARY_INV の場合に利用される,最大値の値.
thresholdType  閾値処理の種類.

공식 문서 : Threshold 함수

여기서 나는 thresh의 값에서 maxVal의 값까지의 범위를 추출한다고 생각했다.
즉, 아래와 같이 쓰면 120~140 사이의 부분만이 추출이 가능하다고 생각하고 있었다.

double threshold(const Mat& src, Mat& dst, double 120, double 140, THRESH_BINARY)



그러나 실제로는 120 ~ 255 사이의 픽셀을 추출하고 추출한 픽셀을 140의 밝기로 이미지를 생성하여 dst에 넣는 것이었다.

지정된 범위 (위의 예의 경우 120 ~ 140) 만 2 치화하고 싶습니다.



120 ~ 140 부분을 추출하는 함수를 만들었습니다.
Mat Binarization(Mat input, int low, int high){
  Mat thresh_1, thresh_2, output;

  threshold(input, thresh_1, low, 255, CV_THRESH_BINARY);       // binalized
  threshold(input, thresh_2, high, 255, CV_THRESH_BINARY_INV);  // binalized
  bitwise_and(thresh_1, thresh_2, output);                      // and演算

  return output;
}
  • 인수
  • 입력 : 입력 이미지 (그레이 스케일링 된 이미지)
  • low : 낮은 임계 값 (위의 예에서 120)
  • high : 높은 임계 값 (위의 예에서 140)

  • 반환값
  • output:(이진화된 Mat형 이미지)



  • 끝에



    어땠습니까?
    자신과 같은 착각을 하고 있는 사람은 적을지도 모릅니다만, 조금이라도 도움이 된다고 생각합니다.
    또, 뭔가 실수가 있으면, 코멘트등으로 알려 주시면 다행입니다.

    좋은 웹페이지 즐겨찾기