Sto provando a rilevare una lancetta dell'orologio in un video di un display analogico e ad estrarre il valore a cui punta. Sto usando Python con OpenCV per questo.
Quello che essenzialmente faccio è:
- Sto usando un Gaussian Blur per ridurre il rumore nell'immagine attuale.
- Uso Canny Edge Detection per filtrare i bordi
- Applico la trasformazione probalistica Hough Line
Il codice per questo:
def detect_clock_hand(img, center):
# Convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# Apply gaussian blur
blur = cv2.GaussianBlur(gray, (11, 11), 0, 0)
# Apply sobel edge detection
edges = cv2.Canny(blur, 30, 40)
# Apply HoughTransform
lines = cv2.HoughLinesP(edges, 10, np.pi / 180, 5, 15, 50)
#Filter lines in a given radius
filtered_edges = util.filter_edges(lines, center)
Ho giocato molto con i parametri per migliorare i risultati. Lo stato corrente assomiglia a questo:
Comepuoivedere,ilrisultatosegnasolounapartedellalancetta.Equellapartenonèuneventounaparte"buona" da quello che posso dire dal Canny Edge Detection. Mi chiedo se uso l'Hough Transform errato o che Edge Detection in realtà non sia buono come credo. Dal momento che sono nuovo di Image Processing, sarei grato per qualsiasi consiglio.