Opencv(이진화)
명함 검출과 인식
일반적인 명함 사진의 조건
- 명함은 흰색 배경에 검정색 글씨이다.
- 명함은 충분히 크게 촬영되었다.
- 명함은 각진 사각형 모양이다.
명함 검출 및 인식 진행 과정
- 이진화
- 외곽선 검출 & 다각형 근사화
- 투영 변환
- OCR
이진화
영상의 이진화
- 영상의 픽셀 값을 0 또는 1(255)로 만드는 연산
- 그레이스케일 영상의 이진화 : 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()
그레이스케일을 완료한 후 사진이다.
임계값을 설정한 후 사진이다.
하지만 입력영상의 밝기가 다른 경우 자동 임계값을 설정해주는 함수를 사용해주는게 좋다.
밝기가 다른 경우 자동 임계값을 설정하지 않은 명함
자동 임계값 설정하기
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()
출처 - Tacademy 파이썬 OpenCV 입문
Leave a comment