상위 목록: 하위 목록: 작성 날짜: 읽는 데 12 분 소요

비트 연산(Bitwise)

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

Mat 형식의 이미지를 사용합니다.

원본(Source, src)은 영상이나 이미지를 사용합니다.



메인 코드

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);


세부 코드

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, 결과, 마스크 이미지들의 크기는 모두 같아야합니다.



출력 결과

댓글 남기기