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

이진화(Binary)

영상이나 이미지를 어느 지점을 기준으로 흑색 또는 흰색의 색상으로 변환하기 위해서 사용합니다.

원본(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;
            
        public IplImage Binary(IplImage src)
        {
            bin = new IplImage(src.Size, BitDepth.U8, 1);
            Cv.CvtColor(src, bin, ColorConversion.RgbToGray);
            Cv.Threshold(bin, bin, 100, 255, ThresholdType.Binary);
            return bin;
        }
            
        public void Dispose()
        {
            if (bin != null) Cv.ReleaseImage(bin);
        }
    }
}


세부 코드

public IplImage Binary(IplImage src)
{
    ...
}

Binary에서 영상을 이진화로 변하게 됩니다.


bin = new IplImage(src.Size, BitDepth.U8, 1);

bin에 메모리 확보를 위하여 선언합니다.

IplImage(크기, 정밀도, 채널)을 입력합니다.

단색일 경우 채널은 1이며, 다색일 경우 채널은 3입니다.

  • Tip : 이진화는 단색이기 때문에, 채널은 1입니다.


 Cv.CvtColor(src, bin, ColorConversion.RgbToGray);

Cv.CvtColor()을 이용하여 그레이스케일로 만듭니다.


Cv.Threshold(bin, bin, 100, 255, ThresholdType.Binary);

Cv.Threshold()를 이용하여 임계점과 최댓값을 설정합니다.

Cv.Threshold(원본, 결과, 임계값, 최댓값, 임계값종류)를 설정합니다.

원본그레이스케일bin이기 때문에 원본에 결과를 덧씌웁니다.

임계값은 100일 경우 100을 기준으로 100보다 이하면 0으로 100보다 이상이면 최댓값으로 변경합니다.

임계값종류는 이진화할 방법을 선택합니다.

  • Tip : 0흑색, 255백색을 의미합니다.



메인 코드

using (OpenCV Convert = new OpenCV())
{
    pictureBoxIpl2.ImageIpl = Convert.Binary(src);
}

Binary이진화 된 이미지를 표시합니다.



출력 결과

100, 255, ThresholdType.Binary


100, 255, ThresholdType.BinaryInv


100, 255, ThresholdType.Otsu


100, 255, ThresholdType.ToZero


100, 255, ThresholdType.ToZeroInv


100, 255, ThresholdType.Truncate


50, 255, ThresholdType.Binary


150, 255, ThresholdType.Binary


200, 255, ThresholdType.Binary


50, 200, ThresholdType.Binary


100, 200, ThresholdType.Binary

댓글 남기기