OpenCV / / 2022. 11. 15. 10:35

OpenCV - 영상 코너 검출

< 영상 특징 검출 > 

영상 처리 단계 : 입력영상 -> 전처리 -> 후처리 -> 출력


< 코너 검출 >

<특징>
-> 영상으로부터 추출한 유용한 정보
-> 밝기 평균 , 히스토그램 , 엣지 , 코너
-> 전역특징 , 지역특징

<코너 검출 방법>
-> 엣지 방향이 급격히 변하는 부분
-> 꼭짓점 , 튀어나온 부분
-> 코너는 다른 지역 특징에 비해 분별력이 높고 영상 전체에 분포

코너

A: 평탄한 영역
B: 수평선
C: 수평선 + 코너

 
import cv2
import numpy as np
def findLocalMaxima(src):
    kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(11,11))
    dilate = cv2.dilate(src, kernel)
    localMax = (src == dilate)
    erode = cv2.erode(src, kernel)
    localMax2 = (src > erode)
    localMax &= localMax2
    points = np.argwhere(localMax == True)
    points[:, [0, 1]] = points[:, [1, 0]]
    return points

path = './'
src = cv2.imread(path+'CornerTest.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
res = cv2.preCornerDetect(gray, ksize=3)
_, res2 = cv2.threshold(np.abs(res), 0.1, 0, cv2.THRESH_TOZERO)
points = findLocalMaxima(res2)
dst = src.copy()
for x, y in points:
    r = np.random.randint(0, 255)
    g = np.random.randint(0, 255)
    b = np.random.randint(0, 255)
    cv2.circle(dst, (x, y), 4, (b, g, r), 2) # corners 이용 작은 원 그리기
cv2.imshow('src', gray)
cv2.imshow('res2', res2)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.waitKey(1)

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유