Favicon

Bitwise operations

Peponi2/17/20253m

C#
NugetPackageOpenCvSharp4

1. Introduction

OpenCvSharp4는 이미지에 대한 연산 기능을 제공하여 이미지와 이미지, 이미지와 스칼라 연산을 쉽게 할 수 있다. 이 때, 연산은 각 픽셀의 채널별로 수행된다.

이 문서에서는 다음 메서드에 대한 예시를 간략하게 알아본다.

  • Cv2.BitwiseAnd()
  • Cv2.BitwiseOr()
  • Cv2.BitwiseNot()
  • Cv2.BitwiseXor()

실습에 사용할 이미지는 다음과 같다.

Image by Vikash Kr Singh from PixabayImage by sebastian del val from Pixabay

2. BitwiseAnd

Cv2.BitwiseAnd with imageCv2.BitwiseAnd with scalar

Cv2.BitwiseAnd() 메서드는 다음 연산을 수행한다.

  1. 이미지, 이미지
    result[i]=image1[i]image2[i]ifmask[i]0result[i] = image1[i]\,\wedge\,image2[i] \quad\text{if}\enspace mask[i] \not = 0
  2. 이미지, 스칼라
    result[i]=image[i]valueifmask[i]0result[i] = image[i]\,\wedge\,value \quad\text{if}\enspace mask[i] \not = 0
private void And(Mat image1, Mat image2)
{
    using var withImage = new Mat();
    Cv2.BitwiseAnd(image1, image2, withImage);
 
    using var withScalar = new Mat();
    Cv2.BitwiseAnd(image1, 50, withScalar);
}

3. BitwiseOr

Cv2.BitwiseOr with imageCv2.BitwiseOr with scalar

Cv2.BitwiseOr() 메서드는 다음 연산을 수행한다.

  1. 이미지, 이미지
    result[i]=image1[i]image2[i]ifmask[i]0result[i] = image1[i]\,\vee\,image2[i] \quad\text{if}\enspace mask[i] \not = 0
  2. 이미지, 스칼라
    result[i]=image[i]valueifmask[i]0result[i] = image[i]\,\vee\,value \quad\text{if}\enspace mask[i] \not = 0
private void Or(Mat image1, Mat image2)
{
    using var withImage = new Mat();
    Cv2.BitwiseOr(image1, image2, withImage);
 
    using var withScalar = new Mat();
    Cv2.BitwiseOr(image1, 50, withScalar);
}

4. BitwiseNot

Cv2.BitwiseNot with image

Cv2.BitwiseNot() 메서드는 다음 연산을 수행한다.

result[i]=¬image[i]result[i] = \neg\, image[i]

private void Not(Mat image)
{
    using var result = new Mat();
    Cv2.BitwiseNot(image, result);
}

5. BitwiseXor

Cv2.BitwiseXor with imageCv2.BitwiseXor with scalar

Cv2.BitwiseXor() 메서드는 다음 연산을 수행한다.

  1. 이미지, 이미지
    result[i]=image1[i]image2[i]ifmask[i]0result[i] = image1[i]\,\oplus\,image2[i] \quad\text{if}\enspace mask[i] \not = 0
  2. 이미지, 스칼라
    result[i]=image[i]valueifmask[i]0result[i] = image[i]\,\oplus\,value \quad\text{if}\enspace mask[i] \not = 0
private void Xor(Mat image1, Mat image2)
{
    using var withImage = new Mat();
    Cv2.BitwiseXor(image1, image2, withImage);
 
    using var withScalar = new Mat();
    Cv2.BitwiseXor(image1, 50, withScalar);
}

6. 참조 자료