분류 전체보기 428

[47] 9) 명함 인식 프로그램

명함 인식 프로그램 영상에서 명함을 검출하고, 명함 안의 텍스트를 인식하는 프로그램 가정: 명함은 흰색이고, 충분히 크게 촬영되었고, 각지 사각형 모양이다 명함 검출 import cv2 import sys import numpy as np import random import pytesseract def reorderPts(pts): idx=np.lexsort((pts[:,1],pts[:,0])) #칼럼0 -> 칼럼 1 순으로 정렬한 인덱스를 반환 [0,3,1,2]가 나올것임 pts=pts[idx] #x좌표로 정렬 if pts[0,1]> pts[1,1]: pts[[0,1]]=pts[[1,0]] #두 점을 스와핑 하는 코드 if pts [2,1]1: filename=sys.argv[1] src=cv2.im..

[46] 8) 다양한 외곽선 함수

외곽선 관련 함수 외곽선 길이 구하기 cv2.arcLength(curve,closed) -> retval • curve: 외곽선 좌표 . numpy.ndarray . shape=(K, 1, 2) • closed: True 이면 폐곡선으로 간주 • retval: 외곽선 길이 면적 구하기 cv2.contourArea(contour,oriented=None) -> retval • contour: 외곽선 좌표 . numpy.ndarray . shape=(K, 1, 2) • oriented: True 이면 외곽선 진행 방향에 따라 부호 있는 면적을 반환 기본값은 False. • retval: 외곽선으로 구성된 영역의 면적 바운딩 박스(외곽선을 외접하여 둘러싸는 가장 작은 사각형) 구하기 cv2.boundingRe..

[45] 7) 외곽선 검출

외곽선 검출이란? 객체의 외곽선 좌표를 모두 추출하는 작업. Boundary tracking. Contour tracing. 바깥쪽 & 안쪽(홀) 외곽선 -> 외곽선의 계층 구조도 표현 가능 외곽선 객체 하나의 표현 방법 numpy.ndarray shape=(K,1,2) (K는 외곽선 좌표 개수) dtype=numpy.int32 여러 외곽선 표현 방법 "객체 하나의 외곽선(numpy.ndarray)"을 원소로 갖는 리스트 len(리스트)=전체 외곽선 개수(N) 외곽선 검출 함수 cv2.findContours(image,mode,method,contours=None,hierarchy=None,offset=None) -> contours,hierachy • image: 입력 영상 . non zero 픽셀을 ..

[44] 6) 레이블링

객체 단위 분석 (흰색) 객체를 분할하여 특징을 분석 객체 위치 및 크기 정보, ROI추출, 모양 분석 등 레이블링(Connected Component Labeling) 서로 연결되어 있는 객체 픽셀에 고유한 번호를 지정(레이블맵) 영역 기반 모양 분석 레이블맵, 바운딩 박스 ,픽셀 개수, 무게 중심 좌표를 반환 외곽선 검출(Contour Tracing) 각 객체의 외곽선 좌표를 모두 검출 외곽선 기반 모양 분석 다양한 외곽선 처리 함수에서 활용 가능(근사화, 컨벡스힐 등) 레이블링 이란? 동일 객체에 속한 모든 픽셀에 고유한 번호를 매기는 작업 일반적으로 이진 영상에서 수행 Connected component labeling 픽셀의 연결 관계 4-이웃 연결 관계 8-이웃 연결 관계 레이블링 알고리즘의 ..

[43] 모폴로지(2): 열기와 닫기

이진 영상의 열기(opening) 연산 이진 영상의 닫기(closing) 연산 범용 모폴로지 연산 함수 cv2.morphologyEx(src,op,kernel,dst=None,anchor=None,iteration=None,borderType=None,borderValue=None) -> dst 열기 연산을 이용한 잡은 제거 예제 import sys import numpy as np import cv2 src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() #src영상에 지역 이진화 수행(local_th.py참고(지역이진화 구현 부분)) dst1=np.zeros(src.s..

[42] 4) 모폴로지 (1): 침식과 팽창

모폴로지(Morphology) 연산이란? 영상을 형태학적인 측면에서 다루는 기법 다양한 영상 처리 시스템에서 전처리(pre-processing) 또는 후처리(post-processing) 형태로 널리 사용 수학적 모폴로지(mathematical morphology) 구조 요소(Structuring element) 모폴로지 연산의 결과를 결정하는 커널, 마스크, 윈도우 이진 영상의 침식(errosion) 연산 구조 요소가 객체 영역 내부에 완전히 포함될 경우 고정점 픽셀을 255로 설정 침식 연산은 객체 외각을 깍아내는 연산 --> 객체 크기는 감소 & 배경은 확대 이진 영상의 팽창(diliation) 연산 구조 요소와 객체 영역이 한 픽셀이라도 만날 경우 고정점 픽셀을 255로 설정 팽창 연산은 객체 외..

[41] 3) 지역 이진화

균일하지 않은 조명 환경에서 촬영된 영상의 이진화 균일하지 않은 조명의 영향을 해결하려면? 불균일한 조명 성분을 보상한 후 전역 이진화 수행 픽셀 주변에 작은 윈도우를 설정하여 지역 이진화 수행 윈도우의 크기는? 윈도우 형태는? uniform? Gaussian? 윈도우를 겹칠 것인가? Overlap? Non-overlap? 윈도우 안에 배경 또는 객체만 존재한다면? 지역 이진화 예제 import sys import numpy as np import cv2 # 입력 영상 불러오기 src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() #전역 이진화 by Otsu's meth..

[40] 2) 자동 이진화: otsu 방법

임계값 자동 결정 방법 Ostu 이진화 방법 입력 영상이 배경(background)과 객체(object) 두 개로 구성되어 있다고 가정 -> Bimodal histogram 임의의 임계값 T에 의해 나눠지는 두 픽셀 분포 그룹의 분산이 최소가 되는 T를 선택 일종의 최적화 알고리즘 (optimization algorithm) Otsu 방법을 이용한 자동 이진화 import sys import numpy as np import cv2 src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() th,dst=cv2.threshold(src,0,255,cv2.THRESH_BINARY..

[39] 7.이진 영상 처리 1) 영상의 이진화

영상의 이진화(Binarization)란? 영상의 픽셀 값을 0 또는 255(1) 로 만드는 연산 배경(background) vs 객체(object) 관심 영역 vs 비관심 영역 그레이스케일 영상의 이진화 임계값 함수 cv2.threshold(src,thresh,maxval,type,dst=None) -> retval,dst • src : 입력 영상 . 다채널 , 8 비트 또는 32 비트 실수형 • thresh: 사용자 지정 임계값 • maxval : cv2.THRESH_BINARY 또는 cv2.THRESH_BINARY_INV 방법 사용 시 최댓값. 보통 255 로 지정 • type: cv2.THRESH_ 로 시작하는 플래그. 임계값 함수 동작 지정 또는 자동 임계값 결정 방법 지정 • retval: 사..

[38] 5) 허프 변환: 원 검출

허프 변환을 응용하여 원을 검출할 수 있음 속도 향상을 위해 Hough gradient method 사용 입력 영상과 동일한 2차원 평면 공간에서 축적 영상을 생성 에지 픽셀에서 그래디언트 계산 에지 방향에 따라 직선을 그리면서 값을 누적 원의 중심을 먼저 찾고, 적절한 반지름 검출 단점: 여러개의 동심원을 검출 못함 --> 가장 작은 원 하나만 검출됨 허프 변환 원 검출 함수 cv2.HoughCircles(image,method,dp,minDist,circles=None,param1=None,param2=None,minRadius=None,maxRadius=None) -> circles • image: 입력영상. (에지영상이아닌일반영상) • method: OpenCV4.2 이하에서는 cv2.HOUGH_..