C# OpenCV 강좌 : 제 42강 - Bitwise (Mat)

   

비트 연산 (Bitwise)


1 Bitwise를 사용하여 영상이나 이미지를 비트 연산을 할 수 있습니다. Mat 형식의 이미지를 사용합니다.


원본(Source, src)를 영상이나 이미지를 사용하면 됩니다.


영상 사용하기 : 3강 바로가기
이미지 사용하기 : 4강 바로가기
Mat 영상 사용하기 : 39강 바로가기


Main Code


using OpenCvSharp;
using OpenCvSharp.CPlusPlus;


Mat m_src1 = new Mat(src);
Mat m_src2 = new Mat(src_bin);
Mat bitwise = new Mat();

Window win_src1 = new Window("src1", WindowMode.StretchImage, m_src1);
Window win_src2 = new Window("src2", WindowMode.StretchImage, m_src2);

Cv2.BitwiseAnd(m_src1, m_src2.CvtColor(ColorConversion.GrayToBgr), bitwise);
Window win_And = new Window("BitwiseAnd", WindowMode.StretchImage, bitwise);

Cv2.BitwiseOr(m_src1, m_src2.CvtColor(ColorConversion.GrayToBgr), bitwise);
Window win_Or = new Window("BitwiseOr", WindowMode.StretchImage, bitwise);

Cv2.BitwiseXor(m_src1, m_src2.CvtColor(ColorConversion.GrayToBgr), bitwise);
Window win_Xor = new Window("BitwiseXor", WindowMode.StretchImage, bitwise);

Cv2.BitwiseNot(m_src2, bitwise);
Window win_Not = new Window("BitwiseNot", WindowMode.StretchImage, bitwise);


Class Code


using OpenCvSharp;
using OpenCvSharp.CPlusPlus;

Bitwise 함수를 사용하기 위해서는 네임스페이스using OpenCvSharp.CPlusPlus;를 선언해야 사용할 수 있습니다.


Mat m_src1 = new Mat(src);
Mat m_src2 = new Mat(src_bin);
Mat bitwise = new Mat();

Mat 형식의 이미지를 생성합니다. new Mat(IplImage)를 이용하면 IplImage 형식의 이미지를 Mat 형식으로 변경할 수 있습니다.

m_src는 비트 연산에 사용할 이미지1 입니다.

m_src2는 비트 연산에 사용할 이미지2 입니다. 이미지2이미지1에 이진화를 적용한 이미지입니다.

bitwise는 비트 연산이 적용된 결과 이미지입니다.


Window win_src1 = new Window("src1", WindowMode.StretchImage, m_src1);
Window win_src2 = new Window("src2", WindowMode.StretchImage, m_src2);

Window win을 이용하여 m_srcm_src2를 출력합니다.


And 연산

Cv2.BitwiseAnd(m_src1, m_src2.CvtColor(ColorConversion.GrayToBgr), bitwise);
Window win_And = new Window("BitwiseAnd", WindowMode.StretchImage, bitwise);

Cv2.BitwiseAnd()를 이용하여 And 연산을 실행합니다.

Cv2.BitwiseAnd(이미지1, 이미지2, 결과, 마스크)입니다.

이미지2가 흑백 이미지 일 경우, 이미지2흰색 부분만 출력합니다.


Or 연산

Cv2.BitwiseOr(m_src1, m_src2.CvtColor(ColorConversion.GrayToBgr), bitwise);
Window win_Or = new Window("BitwiseOr", WindowMode.StretchImage, bitwise);

Cv2.BitwiseOr()를 이용하여 Or 연산을 실행합니다.

Cv2.BitwiseOr(이미지1, 이미지2, 결과, 마스크)입니다.

이미지2가 흑백 이미지 일 경우, 이미지2검은색 부분만 출력합니다.


Xor 연산

Cv2.BitwiseOr(m_src1, m_src2.CvtColor(ColorConversion.GrayToBgr), bitwise);
Window win_Or = new Window("BitwiseOr", WindowMode.StretchImage, bitwise);

Cv2.BitwiseXor()를 이용하여 Xor 연산을 실행합니다.

Cv2.BitwiseXor(이미지1, 이미지2, 결과, 마스크)입니다.

이미지2가 흑백 이미지 일 경우, 이미지2검은색 부분만 출력하며, 흰색 부분은 반전 출력합니다.


Not 연산

Cv2.BitwiseNot(m_src2, bitwise);
Window win_Not = new Window("BitwiseNot", WindowMode.StretchImage, bitwise);

Cv2.BitwiseNot()를 이용하여 Not 연산을 실행합니다.

Cv2.BitwiseNot(이미지, 결과, 마스크)입니다.

이미지가 흑백 이미지 일 경우, 반전 시켜 출력합니다.



  • Tip : 비트 연산에 사용되는 모든 이미지는 Mat 형식을 사용합니다.

  • Tip : 이미지1의 경우 채널이 3 이며, 이미지2의 경우 채널이 1 입니다.

  • Tip : 이미지2의 경우, 이미지1과 채널이 다르므로 m_src.CvtColor(ColorConversion.GrayToBgr)을 이용하여 3개의 채널을 가지는 이미지로 즉각 변환이 가능합니다.

  • Tip : 마스크를 사용하지 않는 경우 생략이 가능합니다.

  • Tip : 이미지1, 이미지2, 결과, 마스크 이미지들의 크기는 모두 같아야합니다.


Result


2



도움이 되셨다면 광고 클릭 부탁드립니다.

⤧  Next post C# OpenCV 강좌 : 제 43강 - Background Remove (Mat) ⤧  Previous post C# OpenCV 강좌 : 제 41강 - Window (Mat)