🔥 Programming/OpenCV

[OpenCV4] C# Bitwise 연산

스쳐가는비 2023. 2. 8. 20:33

Bitwise 연산

Bitwise 연산에는 4가지가 있다.

  • BitwiseAnd
  • BitwiseOr
  • BitwiseXor
  • BitwiseNot

실제로 나의 경우는 BitwiseNot은 종종 사용하지만 다른 함수들의 경우에는 사용 빈도수가 낮은편이다.

예를들면 어떠한 이미지의 배경에 다른 이미지를 삽입 하였을 경우, 배경을 지우는 처리를 할때, grayscale을 바꿔주어 BitwiseNot 연산을 한다던지.. 그런식으로 사용한다.

 

더구나 C#에서는 포인터가 없기에, 비트맵의 RGB 데이터에 접근하기 위해선 꽤나 귀찮다.

 

And와 Or, Xor, Not 연산은 보통은 대학교 1학년때 ? 배운 논리수학에 나왔던 내용과 해당 비트 연산은 동일하다.

 

우선, 아래는 기본 이미지와, 단일 채널로 바꿔준 이미지이다.

기본이미지, Grayscale 적용된 이미지

And 연산과 Or 연산을 하였을 경우를 확인해보자.

And연산, Or 연산

아래는 Xor과 Not 연산을 하였을때의 이미지이다.

Xor연산, Not연산

OpenCV를 사용하다보면 가장 기초적인 내용중 하나이기에, 숙지하고 있는게 좋다.

 

Code ( C# )

public void ImageProcessing()
{
    Mat testMat = BitmapConverter.ToMat(Properties.Resources.testImage);
    Mat grayscale = new Mat();
    Mat result = new Mat();

    Cv2.CvtColor(testMat, grayscale, ColorConversionCodes.BGR2GRAY);
    Cv2.Threshold(grayscale, grayscale, 40, 255, ThresholdTypes.Binary);

    // 기본 이미지
    Cv2.ImShow("testMat", testMat);

    // Grayscale
    Cv2.ImShow("grayscale", grayscale);

    // And 연산
    Cv2.BitwiseAnd(testMat, grayscale.CvtColor(ColorConversionCodes.GRAY2BGR), result);
    Cv2.ImShow("And", result);

    // Or 연산
    Cv2.BitwiseOr(testMat, grayscale.CvtColor(ColorConversionCodes.GRAY2BGR), result);
    Cv2.ImShow("Or", result);

    // Xor 연산
    Cv2.BitwiseXor(testMat, grayscale.CvtColor(ColorConversionCodes.GRAY2BGR), result);
    Cv2.ImShow("Xor", result);

    // Not 연산
    Cv2.BitwiseNot(testMat, result);
    Cv2.ImShow("Not", result);
}