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

C# OpenCV Calculate

C# OpenCV 강좌 : 제 50강 - 연산 (2)
[ 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 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



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

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

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

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

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 49강 - 연산 (1) ⤧  Next post C# OpenCV 강좌 : 제 51강 - 피부색 검출
    C#-OpenCvSharp2 Category