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

이진화

영상이나 이미지의 어느 지점을 기준으로 픽셀을 분류해 제외합니다.

특정 값을 기준으로 값이 높거나 낮은 픽셀검은색 또는 흰색의 값으로 변경합니다.

기준값에 따라 이분법적으로 구분해 픽셀을 또는 거짓으로 나누는 연산입니다.



메인 코드

using System;
using OpenCvSharp;

namespace Project
{
    class Program
    {
        static void Main(string[] args)
        {
            Mat src = new Mat("rose.jpg");
            Mat gray = new Mat();
            Mat binary = new Mat();

            Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);
            Cv2.Threshold(gray, binary, 150, 255, ThresholdTypes.Binary);

            Cv2.ImShow("src", src);
            Cv2.ImShow("dst", binary);
            Cv2.WaitKey(0);
        }
    }
}


세부 코드

Mat src = new Mat("rose.jpg");
Mat gray = new Mat();
Mat binary = new Mat();

new Mat을 사용해 이미지를 src에 할당합니다.

graysrc그레이스케일로 변화시켜, 단일 채널로 변경하기 위한 공간입니다.

binary이진화된 이미지가 저장될 공간입니다.

  • Tip : 이진화는 단일 채널에 대해서만 적용됩니다. src에 적용할 경우, 각 채널별로 이진화가 적용됩니다.


Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(gray, binary, 150, 255, ThresholdTypes.Binary);

색상 공간 변환 함수(Cv2.CvtColor)를 활용해 색상 이미지에서 흑백 이미지로 변환합니다.

이진화를 적용할 때 가장 많이 선행으로 적용되는 변환법입니다.

이진화 함수(Cv2.Threshold)를 활용해 이미지를 이진화합니다.

Cv2.Threshold(원본 이미지, 결과 이미지, 임곗값, 최댓값, 임곗값 형식)로 이진화를 적용합니다.

임곗값 형식에 따라 이진화 방식을 설정합니다.

임곗값 보다 낮은 픽셀값은 0이나 원본 픽셀값으로 변경하며, 임곗값보다 높은 픽셀값은 최댓값으로 변경합니다.



임곗값 형식 종류

속성 의미
ThresholdTypes.Binary 임곗값을 초과할 경우 최댓값, 아닐 경우 0
ThresholdTypes.BinaryInv 임곗값을 초과할 경우 0, 아닐 경우 최댓값
ThresholdTypes.Trunc 임곗값을 초과할 경우 임곗값, 아닐 경우 변형 없음
ThresholdTypes.Tozero 임곗값을 초과할 경우 변형 없음, 아닐 경우 0
ThresholdTypes.TozeroInv 임곗값을 초과할 경우 0, 아닐 경우 변형 없음
ThresholdTypes.Mask 검은색 이미지로 변경(마스크용)
ThresholdTypes.Otsu 오츠 알고리즘 적용(단일 채널 이미지에만 적용 가능)
ThresholdTypes.Triangle 삼각형(Triangle) 알고리즘 적용(단일 채널 이미지에만 적용 가능)



출력 결과

댓글 남기기