Python學習-使用opencv-python提取手掌和手心及部分掌紋,

來源:互聯網
上載者:User

Python學習-使用opencv-python提取手掌和手心及部分掌紋,

上次我們成功訓練了手掌辨識器http://www.cnblogs.com/take-fetter/p/8438747.html,可以成功得到識別的結果

接下來需要使用opencv來擷取手掌,去除背景部分,這裡就需要用到掩膜(mask)、ROI(region of interest)等相關知識,具體的概念還是不講了,網上很多。

首先根據上次的程式畫框部分提取手掌(當然自己再儲存也可以-.-)如下

 

接下來講解一下提取手掌的方法

  

  提取手掌中心:

  演算法思想:根據黑白圖片,基於距離變換得到手掌中心,並根據最大半徑畫出手掌的內切圓

  

代碼如下

 distance = cv2.distanceTransform(black_and_white, cv2.DIST_L2, 5, cv2.CV_32F)    # Calculates the distance to the closest zero pixel for each pixel of the source image.    maxdist = 0    # rows,cols = img.shape    for i in range(distance.shape[0]):        for j in range(distance.shape[1]):            dist = distance[i][j]            if maxdist < dist:                x = j                y = i                maxdist = dist
 cv2.circle(original, (x, y), maxdist, (255, 100, 255), 1, 8, 0)
   提取掌紋

    現在我們已知了圓的半徑和圓心座標,因此可以根據ROI提取出內切正方形(雖然內切正方形會損失很多的資訊,但是目前我還沒有想到其他的更好的辦法),作出正方形如下

作正方形並提取的代碼如下

final_img = original.copy()
#cv2.circle() this line half_slide = maxdist * math.cos(math.pi / 4) (left, right, top, bottom) = ((x - half_slide), (x + half_slide), (y - half_slide), (y + half_slide)) p1 = (int(left), int(top)) p2 = (int(right), int(bottom)) cv2.rectangle(original, p1, p2, (77, 255, 9), 1, 1) final_img = final_img[int(top):int(bottom),int(left):int(right)]

運行

可以看到出現了灰色部分,按理說是不會存在的,使用cv2.imwrite發現沒有出現任何問題,

感覺是cv2.imshow對於輸出圖片的像素大小有一定限制,進行了自動填滿或者是預設有灰色作為背景色且比在這裡我們提取出的圖片要大

代碼地址:https://github.com/takefetter/Get_PalmPrint/blob/master/process_palm.py

感謝:

1.https://github.com/dev-td7/Automatic-Hand-Detection-using-Wrist-localisation 這位老哥的repo,基於膚色的提取和形成近似橢圓給我的啟發很大(雖然後半部分完全沒有用.....)

2.http://answers.opencv.org/question/180668/how-to-find-the-center-of-one-palm-in-the-picture/ 雖然基於距離變化參考至這裡的回答,不過也算是完成了提問者的需求。

轉載請註明出處http://www.cnblogs.com/take-fetter/p/8453589.html

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.