C#/C# OpenCV/

C# OpenCV 6-1. BitWise 연산

2019. 11. 21.

대표함수

Cv2.BitwiseAnd 두 이미지를 And 연산

Cv2.BitwiseOr 두 이미지를 Or 연산

Cv2.BitwiseXor 두 이미지를 Xor 연산

Cv2.BitwiseNot 이미지를 Not 연산

 

Example Code

using System;
using System.Windows.Forms;
using OpenCvSharp;

namespace bitWiseTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Mat src = Cv2.ImRead("image.jpg");
            Mat mask = new Mat();
            Mat dst = new Mat();
            Cv2.CvtColor(src, mask, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(mask, mask, 0, 255, ThresholdTypes.Otsu);
            Cv2.ImShow("src", src);
            Cv2.ImShow("mask", mask);

            Cv2.BitwiseAnd(src, mask.CvtColor(ColorConversionCodes.GRAY2BGR), dst);
            Cv2.ImShow("And", dst);

            Cv2.BitwiseOr(src, mask.CvtColor(ColorConversionCodes.GRAY2BGR), dst);
            Cv2.ImShow("Or", dst);

            Cv2.BitwiseXor(src, mask.CvtColor(ColorConversionCodes.GRAY2BGR), dst);
            Cv2.ImShow("Xor", dst);

            Cv2.BitwiseNot(src, dst);
            Cv2.ImShow("Not", dst);

            Cv2.WaitKey(0);
            Cv2.DestroyAllWindows();
        }
    }
}

 

Explain Code


Cv2.CvtColor(src, mask, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(mask, mask, 0, 255, ThresholdTypes.Otsu);

src 이미지 로드, 이진화를 통해 mask 생성

이진화 다시보기 -> [프로그래밍/C# OpenCV] - C# OpenCV 4-2. Binary

 


Cv2.BitwiseAnd(src, mask.CvtColor(ColorConversionCodes.GRAY2BGR), dst);

Cv2.BitwiseAnd(src1, src2, dst)

      src1 입력1

      src2 입력2

            mask.CvtColor(ColorConversionCodes.GRAY2BGR)

            src 이미지는 3채널 mask 이미지는 1채널, 채널을 맞춰주기위해 직변환

      dst 출력

 

※ And 연산

1 And 1 = 1
1 0 0
0 1 0
0 0 0

 


Cv2.BitwiseOr(src, mask.CvtColor(ColorConversionCodes.GRAY2BGR), dst);

Cv2.BitwiseOr(src1, src2, dst)

      src1 입력1

      src2 입력2

            mask.CvtColor(ColorConversionCodes.GRAY2BGR)

            src 이미지는 3채널 mask 이미지는 1채널, 채널을 맞춰주기위해 직변환

      dst 출력

 

※ Or 연산

1 Or 1 = 1
1 0 1
0 1 1
0 0 0
 

Cv2.BitwiseXor(src, mask.CvtColor(ColorConversionCodes.GRAY2BGR), dst);

Cv2.BitwiseXor(src1, src2, dst)

      src1 입력1

      src2 입력2

            mask.CvtColor(ColorConversionCodes.GRAY2BGR)

            src 이미지는 3채널 mask 이미지는 1채널, 채널을 맞춰주기위해 직변환

      dst 출력

 

※ Xor 연산

1 Xor 1 = 0
1 0 1
0 1 1
0 0 0

  


Cv2.BitwiseNot(src, dst);

Cv2.BitwiseNot(src, dst)

      src 입력

      dst 출력

 

※ Not 연산

1 Not = 0
0 1

 

결과