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

C# OpenCV Calculate

C# OpenCV 강좌 : 제 49강 - 연산 (1)
[ C#-OpenCvSharp2 ] - 윤대희

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



Book Image

책이 출간되었습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍

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

  • C# OpenCvSharp4
  • Python OpenCV4
  • Using Tesseract
  • Using TensorFlow
  • Using Regular Expression
  • 윤대희 저 | 위키북스

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

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 48강 - 윤곽 추적 ⤧  Next post C# OpenCV 강좌 : 제 50강 - 연산 (2)
    C#-OpenCvSharp2 Category