C# OpenCV 강좌 : 제 42강 - 비트 연산 (Mat)
비트 연산(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_src
와 m_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
,결과
,마스크
이미지들의 크기는 모두 같아야합니다.
출력 결과
공유하기


댓글 남기기