C# OpenCV 강좌 : 제 49강 - 연산 (1)

C# OpenCV Calculate

C# OpenCV 강좌 : 제 49강 - 연산 (1)
[ 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 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);
        }
    }
}



Class Code


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

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



Result


And 연산

2


Or 연산

3


Xor 연산

4


Not 연산

5



Book Image

개정판이 출간됐습니다!

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

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

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

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

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 48강 - 윤곽 추적 ⤧  Next post C# OpenCV 강좌 : 제 50강 - 연산 (2)
    C#-OpenCvSharp2 Category