OpenCV / / 2022. 11. 15. 11:15

OpenCV - 코너점 검출

<코너점 검출 > 


cv2.preCornerEigenValsAndVecs(src, blocksize, ksize)
-src : input
-blockSize : 이웃 윈도우 크기
-ksize sobel filter mask
-영상 내 각 이웃의 covariance matrix M의 eigenvalue, eigenvector을 계산 하여 코너 검출


-eigenvalue가 모두 작은 값: 평평한 영역에 있는 점
-eigenvalue 둘중 하나는 크고 하나는 작은 값: 엣지
-eigenvalue 두 값이 모두 큰 값 : 코너


[실습]
src = cv2.imread(path+'CornerTest.jpg)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
cornerMinEigenVal 함수 이용 아이겐 벨류 구해서 임계값 보다 큰 값 반환(이 값이 코너)
eigen = cv2.cornerMinEigenVal(gray,blocksize=5)


eigen 밝기값 분포 확인 eigen이 특정값을 초과하는 좌표 구하기
corners = np.argwhere(eigen > 0.5)
corners[:,[0,1]] = corners[:,[1,0]]


원본 영상을 카피 하여 위의 좌표를 빨간색 점으로 출력

 

import matplotlib.pyplot as plt
src = cv2.imread(path+'CornerTest.jpg')

gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)

eigen = cv2.cornerMinEigenVal(gray,blockSize=5)
print('eigen.shape=',eigen.shape)

corners = np.argwhere(eigen > 0.2)
corners[:,[0,1]] = corners[:,[1,0]]
print('len(corners)=',len(corners))
dst = src.copy()

for x,y, in corners:
    cv2.circle(dst,(x,y),3,(255,0,0),2)
    
plt.figure(figsize=(10,10))

imgae1=plt.subplot(1,2,1)
imgae1.set_title('ori')
plt.axis('off')
plt.imshow(src, cmap="gray")

imgae2=plt.subplot(1,2,2)
imgae2.set_title('corner')
plt.axis('off')
plt.imshow(dst, cmap="gray")

plt.show()

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