Buduję automatyczny czytnik elektryczności/gazu za pomocą OpenCV i Pythona. Mam w miarę robienia zdjęć z kamery internetowej:Jak programowo znaleźć lokalizacje pikseli określonych funkcji w obrazie?
mogę używać afine następnie przekształcić do unwarp obraz (adaptacja 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
..which daje mi coś obrazu tak:
jeszcze trzeba wyodrębnić tekst za pomocą niektórych rodzaj procedury OCR, ale najpierw chciałbym zautomatyzować część, która określa, w jakich lokalizacjach pikseli zastosować transformację afiniczną. Więc jeśli ktoś puka kamerę internetową, nie zatrzymuje oprogramowania.
Czy masz w Pythonie przykład użycia 'homography'. Przykłady na stronie OpenCV dotyczą wersji C++ i mam problem z przetłumaczeniem go na język Python ... –
Nie, użyłem tylko wywołań C++. Jeśli nie możesz uruchomić go bezpośrednio w Pythonie, prawdopodobnie możesz zapisać go jako rozszerzenie C z paczką pythona. – Diana