2013-06-23 32 views
6

我正在使用OpenCV和Python構建一個自動化電力/燃氣表讀取器。據我得爲拍攝時帶有攝像頭:如何以編程方式查找圖像中特定要素的像素位置?

enter image description here

然後我可以使用仿射變換來unwarp圖像(的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 

我的形象是這樣的:

enter image description here

我還需要使用一些提取文本一種OCR例程,但首先我想自動化識別應用仿射變換的像素位置的部分。所以如果有人敲網絡攝像頭,它不會停止軟件的工作。

回答

2

由於您的圖像非常平坦,您可以查看從網絡攝像頭獲取的圖像和所需圖像(直立位置)之間的homography

編輯:這將以直立的位置旋轉圖像。一旦你註冊了你的圖像(使它處於直立位置),你可以做行或列投影(對列上的所有像素進行求和以得到一個向量,將所有像素沿着行求和以得到一個向量)。你可以使用這些向量來找出你在哪裏跳躍的顏色,並在那裏裁剪。

或者,您可以使用Hough變換,它可以爲圖像中的線條提供幫助。如果你這樣做,你可能會不註冊圖像。

+0

你有一個如何使用'單應性'的基於python的例子。 OpenCV網站上的例子是針對C++版本的,我很難將其翻譯成Python ... –

+0

不,我只使用C++調用。如果你不能直接在python中工作,你可以用python wrapper將它作爲C擴展。 – Diana

相關問題