상황
일하고 있는 곳 에서 반도체 불량 부분을 OpenCvSharp4 라이브러리를 사용하여 표시하는 일을 맡게 되었다.
OpenCvSharp4 라이브러리의 Circle, Rectangle 함수를 사용하여 이미지를 그리는 코드를 작성하였는데 회색조 이미지에는 색상 표기가 되는 반면 윈도우 화면을 캡쳐 하여 만들어둔 일반적인 이미지에서는 검은색으로만 표시가 되는 문제가 발생하였다.
추측
처음에는 이미지를 그리기 전에 OpenCV에서 색상을 나타내는 방식(B,G,R)과 .NET에서 색상을 나타내는 방식(R,G,B)이 다르기 때문에 이러한 문제가 발생한 것이라 생각을 하여 변환하는 코드를 작성하였으나
private static Scalar ToScalar(Color color)
{
return new Scalar( color.B, color.G, color.R);
}
해당 코드를 사용했음에도 문제가 해결이 되지 않아 고심하던 중
이미지의 속성에 차이가 있지 않을까? 라는 생각이 문득 들게 되었고
정답이었다.
색상이 잘 표시되는 이미지의 비트수준은 24비트 흔이 알고 있는 (RGB)형식이었고 3채널
색상이 표시되지 않는 이미지의 비트수준은 32비트 (RGB+투명도A)형식이었다 4채널
해결
따라서 이미지를 그리기 전에 OpenCVSharp4의 라이브러리를 사용하여 이미지 타입을 24비트로 변환하여 작업을 하니 문제를 해결 할 수 있었다.
if (Img.Channels() == 4)
{
Img = Img.CvtColor(ColorConversionCodes.BGRA2BGR);
}
'Project > Vision Inspection GUI' 카테고리의 다른 글
논문 초록 작성 고민 (1) | 2023.07.31 |
---|---|
C# 클래스 -> 구조체 변경 Troble Shooting (0) | 2023.07.19 |