Ich versuche, die Pixelwerte der Ecken dieser Dreiecke zu finden. Ich kann Harris-Ecken verwenden und ein numpy Array aller x, y für die Ecken erhalten. Ich möchte diese Eckwerte in einer 2D-Liste namens Ecken wie [[x1,y1], [x2,y2], [x3,y3]]
gespeichert werden.Python offen cv Ecken
Auch, wenn ich Harris Ecken auf einem schwarzen Dreieck (Code unten veröffentlicht), weißen Hintergrund verwenden, sind die Ergebnisse als solche (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))
. Ich muss die 2D-Liste von 3 Ecken aus dieser Liste erstellen.
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())
Also, was passiert ist, erhalten Sie mehrere Punkte, die in der Nähe sind, und Sie müssen diese zu einem einzigen Punkt zusammenführen. Es gibt zwei grundlegende Möglichkeiten, dies zu tun. Entweder führen Sie [* k * -means] (https://docs.opencv.org/3.0-beta/modules/core/doc/clustering.html#kmeans) auf den Punkten mit * k = 3 * aus, um sie zusammen zu gruppieren und Holen Sie sich die Zentren, oder finden Sie einfach die Schwerpunkte jedes Pixelblocks, so wie sie sich auf der Maske befinden, mit ['connectedComponentsWithStats()'] (https://docs.opencv.org/3.0-beta/modules/imgproc/doc/structural_analysis_and_shape_descriptors .html # verbundene Komponenten). –