-
[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댓글