2016-05-04 159 views
3

Pythonで(OpenCVライブラリを使用して)画像内のマーカーを特定するスクリプトを作成したいと考えています。マーカーは、このような何かを見て:2D画像のマーカーを検出する[Python/OpenCV]

Markers

画像をロードした後、スクリプトは(マーカーの数値を返す)画像にあるどのマーカー印刷する必要があります。例えば、私はこの写真ロードする場合:このイメージの

Image with markers

をスクリプトは、3つの数値を返す必要があります:1、2および3 Iスクリプトを持って、画像を読み込み、図形(円、正方形などを認識します私はいくつかの数字で構成されたマーカー全体を認識することは考えていません。何か案は?アルゴリズムやその他の解決策に関するご提案をお願いします。

import numpy as np 
import cv2 

img = cv2.imread('B.jpg') 
gray = cv2.imread('B.jpg',0) 

ret,thresh = cv2.threshold(gray,120,255,1) 

contours,h = cv2.findContours(thresh,1,2) 

for cnt in contours: 
    approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True) 
    print len(approx) 
    if len(approx)==4: 
     print "square" 
     cv2.drawContours(img,[cnt],0,(0,0,255)) 

cv2.imshow('img',img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

もちろん、私が必要とするのは矩形だけです。 ご協力いただきありがとうございます。

+1

1.外側の輪郭を見つけます。 2.輪郭ごとにバウンディングボックスを選択します(画像内の外形が四角形なので、輪郭と同じにする必要があります)。3.画像のサイズを変更して、基準マーカと同じサイズにします。 4.サイズ変更された画像領域とティファイ・マーカのエッジ画像に面取りマッチングを使用する。 5. 1つの面取りマッチングがsmalöならば、検出マーカ – Micka

+1

として最小のものを選択します。追加の遠近歪みがある場合は、boundingBoxesの代わりにクワッドを見つけて、パースペクティブワーピングを使用する必要があります。 – Micka

+1

私はおそらく、ここで説明したように機能のマッチングを試みるでしょうhttp://docs.opencv.org/3.1.0/d1/de0/tutorial_py_feature_homography.html#gsc.tab=0しかし、私はそれを働かせませんでした。この投稿を見てください:http://stackoverflow.com/questions/20259025/module-object-has-no-attribute-drawmatches-opencv-python – tfv

答えて

0

まず、フィーチャマッチング(@tfvユーザによる命題)を試みますが、おそらく良い解決策ではありません。多くのアプローチでは、それはあまりにも多くの試合(しかし、画像が完全に異なっている)または(イメージが同じである)の数が少なすぎる試合

Markers

は、今私は@Mickaによるアルゴリズムを使用しようとしますが、私は問題を抱えています2番目と3番目のポイント。上記の私のポストのコードは四角を見つけます。新しい四角形を新しい画像として保存するにはどうすればよいですか?

enter image description here

関連する問題