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

이 함수는 이미지나 배열에서 특정 범위에 속하는 값들을 찾아내서 이진 이미지(흑백)로 변환하는 데 사용한다.

예를 들어, 어떤 이미지에서 빨간색만 골라내고 싶을 때 이 함수를 쓸 수 있다.

void inRange(cv::InputArray src, cv::InputArray lowerb, cv::InputArray upperb, cv::OutputArray dst)

이런 모양이다.

 

lowerb는 하한선, 배열이나 스칼라 값으로 주어질 수 있다. 이 값보다 크거나 같은 픽셀만 선택된다.

upperb는 상한선, 마찬가지로 배열이나 스칼라 값으로 주어지며, 이 값보다 작거나 같은 픽셀만 선택된다.

dst는 결과가 저장될 출력 배열이다. 이 배열은 src와 같은 크기로 만들어지고, 결과로 나오는 이미지는 CV_8U(8비트, 0과 255 사이) 타입의 이진 이미지다. 즉, 범위 안에 들어오는 값들은 255(흰색)으로, 그 밖의 값들은 0(검은색)으로 변환된다.

 

이 함수는

입력 배열에서 lowerbupperb 사이에 있는 값들은 모두 흰색(255)으로 표시하고 그 외의 값들은 검은색(0)으로 변환한다.

 

다음은 실제 코드 사용 예다

int main() {
    Mat image = imread("hand.png"); // 이미지를 읽어옴
    cvtColor(image, image, CV_BGR2YCrCb); // 이미지 색 공간을 BGR에서 YCrCb로 변환
    inRange(image, Scalar(0, 133, 77), Scalar(255, 173, 127), image); // 피부색 범위를 이용해 색상 필터링
    
    imshow("inRange", image); // 결과 이미지 보여줌
    waitKey(0); // 키 입력 대기
    return 0;
}