C# OpenCV 강좌 : 제 50강 - 연산 (2)

   

연산 (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 symm;    
        IplImage calc;
        
        public IplImage Symmetry(IplImage src)
        {
            symm = new IplImage(src.Size, BitDepth.U8, 3);
            Cv.Flip(src, symm, FlipMode.Y);
            return symm;
        }        
            
        public void Calculate_2(IplImage src)
        {
            IplImage src_symm = src.Clone();
            calc = new IplImage(src.Size, BitDepth.U8, 3);

            src_symm = this.Symmetry(src);
                            
            Cv.Add(src, src_symm, calc);
            CvWindow Add = new CvWindow("Add", WindowMode.StretchImage, calc);

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

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

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

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

            Cv.Min(src, src_symm, calc);
            CvWindow Min = new CvWindow("Min", WindowMode.StretchImage, calc);
            
            Cv.AbsDiff(src, src_symm, calc);
            CvWindow AbsDiff = new CvWindow("AbsDiff", WindowMode.StretchImage, calc);

            Cv.WaitKey();
            {
                Add.Close();
                Sub.Close();
                Mul.Close();
                Div.Close();
                Max.Close();
                Min.Close();
                AbsDiff.Close();
            }
        }
                  
        public void Dispose()
        {
            if (symm != null) Cv.ReleaseImage(symm);                      
            if (calc != null) Cv.ReleaseImage(calc);
        }
    }
}


Class Code


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

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

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


src_symm = this.Symmetry(src);

src_symm좌우대칭한 이미지로 변경합니다.


Add 연산

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

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

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

이미지1이미지2합산합니다.


Sub 연산

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

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

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

이미지1에서 이미지2감산합니다.


Mul 연산

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

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

Cv.Mul(이미지1, 이미지2, 결과, 스케일)입니다.

이미지1에서 이미지2곱합니다.


Div 연산

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

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

Cv.Div(이미지1, 이미지2, 결과, 스케일)입니다.

이미지1에서 이미지2나눕니다.


Max 연산

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

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

Cv.Max(이미지1, 이미지2, 결과)입니다.

이미지1이미지2에서 최댓값을 찾습니다.


Min 연산

Cv.Min(src, src_symm, calc);
CvWindow Min = new CvWindow("Max", WindowMode.StretchImage, calc);

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

Cv.Min(이미지1, 이미지2, 결과)입니다.

이미지1이미지2에서 최솟값을 찾습니다.


AbsDiff 연산

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

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

Cv.AbsDiff(이미지1, 이미지2, 결과)입니다.

이미지1에서 이미지2절댓값 차이를 계산합니다.


Result


Add 연산

2

Sub 연산

3

Mul 연산

4

Div 연산

5

Max 연산

6

Min 연산

7

AbsDiff 연산

8



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

⤧  Next post Python 강좌 : 제 17강 - 데이터 출력 ⤧  Previous post C# OpenCV 강좌 : 제 49강 - 연산 (1)