1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCVでレシート画像のロゴを探す(Template Matching)

Posted at

目的

  • ファミマのレシートを探したい
  • OpenCVの理解
  • なんか画像処理っぽいことしたい

OpenCVにTemplate Matching機能があると聞き、どんなもんだろうと思いお試ししてみました

環境

  • Windows11 Home
  • VSCode
  • Python3.9
  • pip
    opencv-python 4.5.5.62
    numpy 1.22.1

本編

参考文献

ありがとうございます。お世話になりました

プログラム

元の画像

いろいろなレシートを混ぜて取りました。
大きさの違うロゴを左上に貼り付けて、これも探せるといいな。

20220308_171222.jpg1.jpg

テンプレート画像

これを探したい。

famima.jpg

TemplateMatching

    ## 1.file load
    img = cv2.imread(DATA_DIR + filename)

    famima_template = cv2.imread('famima.jpg')
    height, width = famima_template.shape[:2]

    # 画像の検索(Template Matching)
    result = cv2.matchTemplate(img, famima_template, cv2.TM_CCORR_NORMED)

scoreによる足切り

    # 閾値による足きり
    threshold = 0.93
    loc = np.where( result >= threshold)
    dst=img.copy() 
    for pt in zip(*loc[::-1]):
        cv2.rectangle(dst, pt, (pt[0] + width, pt[1] + height), (0,0,255), 10)
   
    save_image(filename+"2", dst)

まあまあうまくいったのですが、大きさが違うと探せないのかな?

20220308_171222.jpg2.jpg

一番scoreが高いもの

    # 検索結果の信頼度と位置座標の取得
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    
    # 検索結果の左上頂点の座標を取得
    top_left = max_loc
    # 検索結果の右下頂点の座標を取得
    bottom_right = (top_left[0] + width, top_left[1] + height)

    # 検索対象画像内に、検索結果を長方形で描画
    cv2.rectangle(img, top_left, bottom_right, (255, 255, 0), 10)

ここのロゴを切り抜いたので正解です。

20220308_171222.jpg3.jpg

まとめ

  • まったく同じものを探し出すことはできる
  • 大きさが違ったりすると探せない。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?