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?
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:
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.
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 ... –
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