Ich habe ein Bild wie diese OpenCV - Howto Kontur (Pfeil) Ausrichtung
mit Bündel von Pfeilen. Ich möchte herausfinden, welche Ausrichtung die Mehrheit der Pfeile auf dem Bild hat.
habe ich einige der Lektüre von opencv und kommen mit dem folowing Code
import numpy as np
import cv2
import math
img = cv2.imread('sample7.png')
height, width, channels = img.shape
img = cv2.resize(img, (width*8, height*8))
img = cv2.medianBlur(img,5)
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,th1 = cv2.threshold(imgray,100,255,cv2.THRESH_BINARY)
edged=cv2.Canny(th1,127,200)
im2,contours,h = cv2.findContours(edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
(img2,cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
screenCnt=None
flag_t=False
flag_s=False
kot=[]
for c in cnts:
approx = cv2.approxPolyDP(c, 0.01*cv2.arcLength(c,True), True)
area = cv2.contourArea(c)
#print area
if int(len(approx)) > 8 and area > 600 and area < 1100:
anglelist=[]
cv2.drawContours(img, [approx], -1, (0, 255, 255), 1)
(x,y),(MA,ma),angle = cv2.fitEllipse(c)
print round(angle,-1)
kot.append(round(angle,-1))
d = {}
for elm in kot:
d[elm] = d.get(elm, 0) + 1
counts = [(j,i) for i,j in d.items()]
count, max_elm = max(counts)
print 'most common:'
print max_elm
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Mit meinem Skript schaffe ich etwas genaue Ergebnisse zu erzielen. Das Problem ist, dass ich dieselben Ergebnisse bekomme, wenn die Pfeile nach oben oder unten, nach links oder nach rechts ausgerichtet sind. Woher weiß man, ob der Pfeil nach links oder rechts zeigt? In beiden Fällen der Bilder unten bekomme ich das gleiche Ergebnis um 90 Grad.
Dies ist offensichtlich ein computergeneriertes Bild. Sie wären viel weiter voraus, wenn Sie mehr Informationen aus dem Code erhalten, der das Bild generiert hat. Vielleicht könnte es zusätzliche Metadaten an die Datei anhängen. Aber ja, OpenCV hat eine Menge Bildverarbeitung, es ist ein sehr guter Startpunkt, wenn die Verarbeitung der Bilder Ihre einzige Option ist. –