Opencv(이진화)

1 minute read

명함 검출과 인식

일반적인 명함 사진의 조건

  • 명함은 흰색 배경에 검정색 글씨이다.
  • 명함은 충분히 크게 촬영되었다.
  • 명함은 각진 사각형 모양이다.

명함 검출 및 인식 진행 과정

  1. 이진화
  2. 외곽선 검출 & 다각형 근사화
  3. 투영 변환
  4. OCR

이진화

영상의 이진화

  1. 영상의 픽셀 값을 0 또는 1(255)로 만드는 연산
  2. 그레이스케일 영상의 이진화 : T(임계값)에 따라서 T 보다 작으면 0 크면 255로 변환한다.

임계값 함수

retval, dst = cv2.threshold(src,thresh,maxval,type,dst=None)

  • src : 입력 영상
  • thresh : 임계값
  • maxval : THRESH_BINARY 또는 THRESH_BINARY_INV 방법을 사용할 때의 최댓값 지정
  • type : 임계값에 의한 변환 함수 지정 또는 자동 임계값 설정 방법(cv.ThresholdTypes), 보통 cv2.THRESH_BINARY,cv2.THRESH_BINARY_INV 사용
  • retval : 사용된 임계값
  • dst : 입계값 영상

간단한 과정

우선 그레이 스케일을 적용한 후 하는것이 좋다.

import sys
import cv2

src = cv2.imread('C:/Users/dlckd/opencv/three/namecard1.jpg')
# 1번은 적당한 밝기 2번은 1번보다 더 밝은거

if src is None:
    print('image load failed')
    sys.exit()

src_gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) # 그레이스케일, 컬러 부분 정보가 필요없기 때문이다

_,src_bin = cv2.threshold(src_gray,130,255,cv2.THRESH_BINARY) # threshold는 두개의 값을 반환하기 때문에 두 개를 받아야한다 첫번 째는 threshold 값 두번째는 영상파일
src=cv2.resize(src,(640,640))
src_gray=cv2.resize(src_gray,(640,640))
cv2.imshow('src',src)
cv2.imshow('src_gray',src_gray)
cv2.waitKey()
cv2.destroyAllWindows()

그레이스케일을 완료한 후 사진이다. GitHub Logo

임계값을 설정한 후 사진이다. GitHub Logo

하지만 입력영상의 밝기가 다른 경우 자동 임계값을 설정해주는 함수를 사용해주는게 좋다.

밝기가 다른 경우 자동 임계값을 설정하지 않은 명함

GitHub Logo

자동 임계값 설정하기

import sys
import cv2

src = cv2.imread('C:/Users/dlckd/opencv/three/namecard2.jpg')
# 1번은 적당한 밝기 2번은 1번보다 더 밝은거

if src is None:
    print('image load failed')
    sys.exit()

src_gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) # 그레이스케일, 컬러 부분 정보가 필요없기 때문이다

_,src_bin = cv2.threshold(src_gray,130,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU) # threshold는 두개의 값을 반환하기 때문에 두 개를 받아야한다 첫번 째는 threshold 값 두번째는 영상파일
src_gray=cv2.resize(src_gray,(640,640))
src_bin=cv2.resize(src_bin,(640,640))

cv2.imshow('src_gray',src_gray)
cv2.imshow('src_bin',src_bin)
# cv2.imshow('src_bin',src_bin)
cv2.waitKey()
cv2.destroyAllWindows()

GitHub Logo

출처 - Tacademy 파이썬 OpenCV 입문

Tags:

Categories:

Updated:

Leave a comment