-
[OpenCVSharp] bgr과 inrange함수프로그래밍/C# + Unity 2020. 2. 16. 11:01728x90
일반적으로 빛의 삼원색을 꼽으라면 rgb라고 순서대로 일컽는다.
하지만, OpenCV는 조금 다르다.
기본적인 채널이 bgr로 구성되는데, 이는 Windows에서 ColorREF를 0x00bbggrr로 지정하는 것에 기인하여 현재까지도 OpenCV에서는 rgb가 아닌 bgr로 사용한다.
출처 : https://www.learnopencv.com/why-does-opencv-use-bgr-color-format/
익숙한 RGB로 변환하기 위해서는 CvtColor함수를 사용하면 된다.
Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2RGB);
두서에 bgr을 설명한 이유는 inrange함수를 처음 사용할 때, 적잖이 당황했기 때문이다.
inrange 함수를 쉽게 설명하면 다음과 같다.
HSV든 BGR이든 RGB든 상관없이 해당 색상표현 방법에 있어서 두 값 사이의 범위 값만 추려낸다.
내가 만약 RGB (230, 123, 215) ~ (255, 148, 240) 구간만 추려내고 싶다면 아래와 같이 작성한다.
Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2RGB); Cv2.InRange(dst, new Scalar(230, 123, 215), new Scalar(255, 148, 240), dst2);
추려내고 싶은 구간이 분할되어 있을 수 있다 그럴 때는 아래와 같이 BitwiseOr함수를 사용하여 하나로 합쳐준다.
Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2RGB); Cv2.InRange(dst, new Scalar(230, 123, 215), new Scalar(242, 135, 227), dst2); Cv2.InRange(dst, new Scalar(243, 136, 228), new Scalar(255, 148, 240), dst3); Cv2.BitwiseOr(dst2, dst3, result);
728x90'프로그래밍 > C# + Unity' 카테고리의 다른 글
[C#] FloodFill 알고리즘과 땅따먹기 (0) 2023.04.01 HttpWebRequest 루트 인증서와 해당 도메인 인증서 확인하기. (0) 2020.05.18 [C#] 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. (0) 2019.11.18 [Unity] Easy Save Plugin to PlayerPrefs (0) 2019.11.04 typeof switch (패턴일치) (0) 2019.11.04 댓글