そうではありません。私は32x32のpng画像をすべてのキャラクタに生成し、それにホワイトノイズを追加します。ビデオのバックグラウンドが動いています。 8と6のようなキャラクタもそれほど違いはありません。ここ は一瞬のために私のコードです:
cap = cv2.VideoCapture("rtsp:...")
time.sleep(2)
templates = {}
w=[]
h=[]
for i in range(0,11):
templates["template_"+str(i)]=cv2.imread(str(i)+'.bmp',0)
tmp_w,tmp_h=templates["template_"+str(i)].shape[::-1]
w.append(tmp_w)
h.append(tmp_h)
threshold = 0.70
while(True):
les_points=[[],[],[],[],[],[],[],[],[],[],[]]
ret, frame = cap.read()
if frame==None:
break
crop_image=frame[38:70,11:364]
gray=cv2.cvtColor(crop_image,cv2.COLOR_BGR2GRAY)
for i in range(0,11):
res= cv2.matchTemplate(gray,templates["template_"+str(i)],cv2.TM_CCOEFF_NORMED)
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
les_points[i].append(pt[0])
cv2.rectangle(crop_image, pt, (pt[0] + w[i], pt[1] + h[i]), (0,i*10,255), 2)
print les_points
cv2.imshow('normal',crop_image)
if cv2.waitKey(1)& 0xFF == ord('p'):
threshold=threshold+0.01
print threshold
if cv2.waitKey(1)& 0xFF == ord('m'):
threshold=threshold-0.01
print threshold
if cv2.waitKey(1) & 0xFF == ord('q'):
break
私はテンプレート内のcaractersのまったく同じ大きさに分割して、他のテスト画像をやっています。これは良い結果を与えていません
各文字のテンプレートマッチングを試しましたか? – Miki
Mikiが応答してくれてありがとう、私は25フレーム/秒でそれぞれのキャラクターごとにテンプレートマッチングを行うことが可能ですか?この小さな画像を比較するよりも小さい画像に分割する必要がありますか? –
私はフレームレートを保証することはできませんが、他のどのOCRアプローチよりも速くなければなりません。あなたは10桁の10個のテンプレートを持っていますが、おそらく1つはスラッシュ(そしてポイントは?)です。次に、画像全体にテンプレートマッチング11(12回)(テンプレートごと)を適用します。あなたは、一致する結果の最大値を見て正しい数字を見つけることができるはずです... – Miki