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

C# OpenCV Bitwise

C# OpenCV 강좌 : 제 42강 - Bitwise (Mat)
[ C#-OpenCvSharp2 ] - 윤대희

비트 연산(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



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


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