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

공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기