🔥 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학년때 ? 배운 논리수학에 나왔던 내용과 해당 비트 연산은 동일하다.
우선, 아래는 기본 이미지와, 단일 채널로 바꿔준 이미지이다.
And 연산과 Or 연산을 하였을 경우를 확인해보자.
아래는 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);
}