• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[07] OpenCV 영상처리 이진화

03 Feb 2020

Reading time ~2 minutes

Table of Contents
  • 이진화
  • 적응형 이진화
    • 코드
      • C++
      • PYTHON

이진화

  • 적응형 이진화
    • 코드
      • C++
      • PYTHON

적응형 이진화

전체 이미지에 하나의 임계값을 사용하는 threshold함수살펴 봄
[PROBLEM]
이미지 일부가 너무 어두운 경우,
1) 하나의 임계값을 사용하여 이진화하여 좋은 결과를 얻기가 힘듦
2) 밝기가 적당한 영역과 너무 어두운 영역을 동시에 만족하는 임계값이 없음
image image

[SOLUTION]
적응형 이진화 Adaptive thresholding 이미지를 작은 영역으로 나누어 각 영역별로 다른 임계값을 사용하는 방법.
적응형 이진화를 위해 OpenCV에서는 adaptive Threshold함수를 제공.

코드

adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

  • src- 소스 (입력) 이미지를 나타내는 클래스 Mat 의 객체
  • dst- 대상 (출력) 이미지를 나타내는 클래스 Mat 의 객체
  • maxValue- 픽셀 값이 임계 값보다 큰 경우 제공되는 값을 나타내는 이중 유형의 변수
  • adaptiveMethod- 사용할 적응 방법을 나타내는 유형의 정수 변수. 다음 두 값 중 하나
    • ADAPTIVE_THRESH_MEAN_C- 임계 값은 이웃 지역의 평균
    • ADAPTIVE_THRESH_GAUSSIAN_C- 임계 값은 가중치가 가우시안 창인 인접 값의 가중치 합계
  • thresholdType- 사용할 임계 값의 유형을 나타내는 정수 유형의 변수.
  • blockSize- 임계 값을 계산하는 데 사용되는 pixelneighborhood의 크기를 나타내는 정수 유형의 변수.
  • C- 두 방법에서 사용되는 상수를 나타내는 이중 유형의 변수 (평균 또는 가중 평균에서 뺀 값).

C++

# include < opencv2/opencv.hpp> # include < iostream>
using namespace cv;
using namespace std;
int main()
{ // 이미지를 읽어옵니다.
  Mat img_color;
  img_color = imread("copy.png", IMREAD_COLOR);
  if (img_color.empty())
  {
    cout << "이미지 파일을 읽을 수 없습니다." << endl;
    return - 1;
  }

  // 그레이 스케일 이미지로 변환합니다.
  Mat img_gray;
  cvtColor(img_color, img_gray, COLOR_BGR2GRAY);

  // 그레이 스케일 이미지에 적응형 이진화를 적용합니다.
  Mat img_binary;
  adaptiveThreshold(img_gray, img_binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 5, 4);

  // 결과 이미지를 보여줍니다.
  imshow("Grayscale", img_gray);
  imshow("Binary", img_binary);
  waitKey(0);
}

PYTHON

import cv2 as cv 
import sys

# 이미지를 읽어옵니다.
img_color = cv.imread("copy.png", cv.IMREAD_COLOR) 
if img_color is None:
 print("이미지 파일을 읽을 수 없습니다." ) 
 sys.exit(1)

# 그레이 스케일 이미지로 변환합니다.
img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)

# 그레이 스케일 이미지에 적응형 이진화를 적용합니다.
img_binary = cv.adaptiveThreshold(img_gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 5, 4);

# 결과 이미지를 보여줍니다.
cv.imshow('Grayscale', img_gray) cv.imshow('Binary', img_binary) cv.waitKey(0)


OpenCV Share Tweet +1