상위 목록: 하위 목록: 작성 날짜: 읽는 데 10 분 소요

연산(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 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);
        }
    }
}


세부 코드

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(이미지, 결과, 마스크)입니다.

이미지가 흑백 이미지 일 경우, 반전 시켜 출력합니다.



출력 결과

And 연산


Or 연산


Xor 연산


Not 연산

댓글 남기기