2017-12-03 2 views
0

저는이 삼각형의 모서리의 픽셀 값을 찾으려고합니다. 해리스 코너를 사용하고 모서리에 대해 모든 x, y의 배열을 얻을 수 있습니다. 코너 값을 [[x1,y1], [x2,y2], [x3,y3]]과 같은 2D 목록에 저장하려고합니다.파이썬 열린 cv 모서리

검은 색 삼각형 (아래에 게시 된 코드)의 해리스 모서리를 사용할 때 흰색 배경의 결과는 (array([121, 121, 122, 122, 123, 123, 124, 124, 359, 359, 359, 359, 359, 359, 360, 360, 360, 360], dtype=int64), array([240, 241, 240, 241, 240, 241, 240, 241, 121, 122, 123, 358, 359,360, 121, 122, 359, 360], dtype=int64))과 같습니다. 이 목록에서 3 모서리의 2D 목록을 만들어야합니다. 당신이 할 수있는 가장 쉬운 방법이 현재 값으로

img = cv2.imread(filePath) 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
gray = numpy.float32(gray) 
dst = cv2.cornerHarris(gray,2,3,0.04) 
x,y = numpy.nonzero(dst > 0.01 * dst.max()) 
+0

그래서 인근에있는 여러 개의 점이 하나의 점으로 병합되어야합니다. 이를 수행하는 기본적인 두 가지 방법이 있습니다. * k = 3 *이있는 포인트에 [* k * -means] (https://docs.opencv.org/3.0-beta/modules/core/doc/clustering.html#kmeans)를 실행하여 함께 클러스터링하고 센터를 가져 오거나 단순히 각 픽셀의 무게 중심을 ['connectedComponentsWithStats()'] (https://docs.opencv.org/3.0-beta/modules/imgproc/doc/structural_analysis_and_shape_descriptors) 마스크를 사용하여 찾을 수 있습니다. .html # connectedcomponents). –

답변

0

K 그룹으로 데이터를 클러스터링하고 당신에게 해당 그룹의 중심을 줄 것이다, K -means을 적용합니다. OpenCV k - Python 튜토리얼 here을 참조하고 cv2.kmeans() docs을 확인하십시오.

그래서 형태 포인트로 시작 :

>>> points = np.array([[x, y] for x, y in zip(X,Y)], dtype=np.float32) 

마지막에게 : 32 비트 cv2.kmeans()에 입력 수레로

>>> X = np.array([121, 121, 122, 122, 123, 123, 124, 124, 359, 359, 359, 359, 359, 359, 360, 360, 360, 360], dtype=np.int64) 
>>> Y = np.array([240, 241, 240, 241, 240, 241, 240, 241, 121, 122, 123, 358, 359, 360, 121, 122, 359, 360], dtype=np.int64) 

우리는 함께 점을 들고 NumPy와 배열을 만듭니다 것은 cv2.kmeans()를 달리고 센터를 움켜 잡기위한 것이다 :

>>> criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) 
>>> centers = cv2.kmeans(points, 3, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)[2] 
>>> centers 
array([[ 122.5  , 240.5  ], 
     [ 359.3999939 , 359.20001221], 
     [ 359.3999939 , 121.80000305]], dtype=float32) 

Of 물론 나중에 필요할 경우 가장 가까운 정수로 반올림 할 수 있습니다.

관련 문제