C# OpenCV 강좌 : 제 49강 - 연산 (1)

   

연산 (Calculate)


1 다양한 연산을 활용하여 영상이나 이미지를 변환을 할 수 있습니다.


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


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


Main Code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;

namespace test
{
    class OpenCV : IDisposable
    {  
        IplImage bin;    
        IplImage calc;
        
        public IplImage Binary(IplImage src)
        {
            bin = new IplImage(src.Size, BitDepth.U8, 1);
            Cv.CvtColor(src, bin, ColorConversion.BgrToGray);
            Cv.Threshold(bin, bin, 100, 255, ThresholdType.Binary);
            return bin;
        }

        public void Calculate_1(IplImage src)
        {
            IplImage src_bin = src.Clone();
            calc = new IplImage(src.Size, BitDepth.U8, 3);

            this.Binary(src_bin).CvtColor(src_bin, ColorConversion.GrayToBgr);

            Cv.And(src, src_bin, calc);
            CvWindow And = new CvWindow("And", WindowMode.StretchImage, calc);

            Cv.Or(src, src_bin, calc);
            CvWindow Or = new CvWindow("Or", WindowMode.StretchImage, calc);

            Cv.Xor(src, src_bin, calc);
            CvWindow Xor = new CvWindow("Xor", WindowMode.StretchImage, calc);

            Cv.Not(src, calc);
            CvWindow Not = new CvWindow("Not", WindowMode.StretchImage, calc);

            Cv.WaitKey();
            {
                And.Close();
                Or.Close();
                Xor.Close();
                Not.Close();
            }
        }
                  
        public void Dispose()
        {
            if (bin != null) Cv.ReleaseImage(bin);
            if (calc != null) Cv.ReleaseImage(calc);
        }
    }
}


Class Code


IplImage src_bin = src.Clone();
calc = new IplImage(src.Size, BitDepth.U8, 3);

src_bin을 생성하여 src의 이미지를 복제합니다.

calc를 결과 이미지로 사용합니다.


this.Binary(src_bin).CvtColor(src_bin, ColorConversion.GrayToBgr);

src_bin이진화를 적용한 후, 색상 형식으로 즉각 변환시킵니다.


And 연산

Cv.And(src, src_bin, calc);
CvWindow And = new CvWindow("And", WindowMode.StretchImage, calc);

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

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

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


Or 연산

Cv.Or(src, src_bin, calc);
CvWindow Or = new CvWindow("Or", WindowMode.StretchImage, calc);

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

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

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


Xor 연산

Cv.Xor(src, src_bin, calc);
CvWindow Xor = new CvWindow("Xor", WindowMode.StretchImage, calc);

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

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

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


Not 연산

Cv.Not(src, calc);
CvWindow Not = new CvWindow("Not", WindowMode.StretchImage, calc);

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

Cv.Not(이미지, 결과, 마스크)입니다.

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


Result


And 연산

2

Or 연산

3

Xor 연산

4

Not 연산

5



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

⤧  Next post C# OpenCV 강좌 : 제 50강 - 연산 (2) ⤧  Previous post C#-OpenCV 예제 : 공 추적