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;
}
이진화를 수행하는 데 사용되는 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;
}
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;
}
끝에
어땠습니까?
자신과 같은 착각을 하고 있는 사람은 적을지도 모릅니다만, 조금이라도 도움이 된다고 생각합니다.
또, 뭔가 실수가 있으면, 코멘트등으로 알려 주시면 다행입니다.
Reference
이 문제에 관하여(OpenCV(C++)로 지정 범위 부분만 이진화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mask00/items/8bd2621a8f006cd2f7a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(OpenCV(C++)로 지정 범위 부분만 이진화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mask00/items/8bd2621a8f006cd2f7a7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)