2013-06-23 9 views
6

Sto costruendo un lettore automatico di contatori di elettricità/gas usando OpenCV e Python. Ho quanto prendere colpi con una webcam:Come faccio a trovare a livello di codice le posizioni dei pixel di funzioni specifiche in un'immagine?

enter image description here

posso quindi utilizzare afine trasformazione per Elimina distorsione dell'immagine (un adattamento di this example):

def unwarp_image(img): 
    rows,cols = img.shape[:2] 
    # Source points 
    left_top = 12 
    left_bottom = left_top+2 
    top_left = 24 
    top_right = 13 
    bottom = 47 
    right = 180 
    srcTri = np.array([(left_top,top_left),(right,top_right),(left_bottom,bottom)], np.float32) 

    # Corresponding Destination Points. Remember, both sets are of float32 type 
    dst_height=30 
    dstTri = np.array([(0,0),(cols-1,0),(0,dst_height)],np.float32) 

    # Affine Transformation 
    warp_mat = cv2.getAffineTransform(srcTri,dstTri) # Generating affine transform matrix of size 2x3 
    dst = cv2.warpAffine(img,warp_mat,(cols,dst_height))  # Now transform the image, notice dst_size=(cols,rows), not (rows,cols) 

    #cv2.imshow("crop_img", dst) 
    #cv2.waitKey(0) 

    return dst 

..che dà me un qualcosa di un'immagine del genere:

enter image description here

ho ancora bisogno di estrarre il testo utilizzando alcuni una sorta di routine OCR ma prima vorrei automatizzare la parte che identifica le posizioni dei pixel per applicare la trasformazione affine a. Quindi se qualcuno bussa alla webcam non si ferma il funzionamento del software.

risposta

2

Poiché l'immagine è praticamente planare, è possibile cercare l'immagine homography tra l'immagine che si ottiene dalla webcam e l'immagine desiderata (in posizione verticale).

Modifica: consente di ruotare l'immagine in posizione verticale. Dopo aver registrato l'immagine (portandola in posizione verticale), potresti fare proiezioni a livello di riga o di colonna (sommare tutti i pixel lungo le colonne per ottenere un vettore, sommare tutti i pixel lungo le righe per ottenerne uno vettore). Puoi usare questi vettori per capire dove hai un salto di colore e ritagliarlo lì.

In alternativa è possibile utilizzare la trasformazione di Hough, che fornisce linee in un'immagine. Probabilmente puoi cavartela senza registrare l'immagine se lo fai.

+0

Avete un esempio basato su Python su come usare l'omografia? Gli esempi sul sito Web OpenCV sono per la versione C++ e ho problemi a tradurlo in Python ... –

+0

No, ho usato solo le chiamate C++. Se non riesci a farlo funzionare direttamente in python, potresti probabilmente scriverlo come estensione C con un wrapper python. – Diana

Problemi correlati