C# OpenCV 강좌 : 제 50강 - 연산 (2)
연산(Calculate)
다양한 연산을 활용하여 영상이나 이미지를 변환을 할 수 있습니다.
원본(Source, src)
은 영상이나 이미지를 사용합니다.
메인 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
namespace Project
{
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);
}
}
}
세부 코드
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
의 절댓값 차이를 계산합니다.
출력 결과
Add 연산
Sub 연산
Mul 연산
Div 연산
Max 연산
Min 연산
AbsDiff 연산
공유하기


댓글 남기기