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 |
결과