ラズベリーPI(6)テンプレートマッチング追跡

https://blog.csdn.net/wc781708249/article/details/78518447

 1切り欠き

輸入CV2
NPとしてnumpyのインポート

__name__ == '__main__' の場合:

    #読み取り画像
    イム= cv2.imread( "image.jpg")

    #選択ROI
    R = cv2.selectROI(IM)

    # クロップ画像
    imCrop = IM [INT(R [1]):INT(R [1] + R [3])、INT(R [0]):INT(R [0] + R [2])]

    #表示は、画像をトリミング
    cv2.imshow( "イメージ"、imCrop)
    cv2.waitKey(0)

 

左上から右下に四角形をドラッグします

あなたが私に似ている場合は、代わりに、中心からドラッグの、左上隅から長方形の右下隅をドラッグしたいと思います。だから、我々は簡単に、この問題を解決する代わりに、強調表示された行の次の行を使用することができます。

 fromCenter =

    R = cv2.selectROI(IM、fromCenter)

私は十字線を表示したくありませんか?

さて、あなたはクロスヘア好きではないと仮定し、それは長方形を見たいと思っていません。あなたは十字線を表示するようにコードを変更することはできません。

ショーの十字線=偽
fromCenter =偽
R = cv2.selectROI( "イメージ"、イム、fromCenter、showCrosshair)

 

2 保存

輸入CV2
 
cv2.namedWindow(「画像」)#は、ウィンドウを作成します
 
IMG = cv2.imread( 'ver.jpg')
cv2.imshow( "イメージ"、IMG)
 
cv2.imwrite( 'test.jpg'、IMG、[INT(cv2.IMWRITE_JPEG_QUALITY)、70])
 
cv2.waitKey(0)
cv2.destroyWindow( "画像")#閉じます
  

  

 3件一致

単一のオブジェクトのマッチング

  • テンプレートマッチングを畳み込み達成される:次に、図サイズ(W-W + 1)×(H-H + 1)を生成し、H×wをと仮定元のサイズW×H、テンプレート図のサイズを、図を生成します各ピクセル値は、元のテンプレートとの一致度を表します。
  • テンプレートマッチングの原理は、非常に簡単で、オリジナルを比較するために、テンプレート画像を動かし続けるためにある、六つの異なる比較方法があります。
    • マッチは、差分の二乗  CV_TM_SQDIFF:試合に二乗差を、ベストマッチは0であります
    • 正規化二乗差のマッチング  CV_TM_SQDIFF_NORMED
    • 関連マッチ  CV_TM_CCORR:より良い製品の両方と一致する、より大きな値の一致度
    • 正規化相関マッチングCV_TM_CCORR_NORMED
    • 相関係数が一致  CV_TM_CCOEFF:1のマッチングの相関係数は、完全な一致を示すと-1最悪の試合のために
    • 正規化相関係数マッチング  CV_TM_CCOEFF_NORMED

https://zhuanlan.zhihu.com/p/62643151

輸入CV2
NPとしてnumpyのインポート
PLTとしてmatplotlibの輸入pyplotから


#1。テンプレートマッチング
IMG = cv2.imread( 'dog.jpg')
img_gray = cv2.cvtColor(IMG、cv2.COLOR_BGR2GRAY)
IMG = cv2.cvtColor(IMG、cv2.COLOR_BGR2RGB)
テンプレート= cv2.imread( 'face_dog.jpg'、0)
H、W = template.shape [2]#rows-> H、cols- W>

マッチング方法の#6種類
メソッド= [ 'cv2.TM_CCOEFF'、 'cv2.TM_CCOEFF_NORMED'、 'cv2.TM_CCORR'、
           'cv2.TM_CCORR_NORMED'、 'cv2.TM_SQDIFF'、 'cv2.TM_SQDIFF_NORMED']

方法でメタのために:
    IMG2 = img.copy()

    真の値#マッチング
    方法= evalの(メタ)
    RES = cv2.matchTemplate(img_gray、テンプレート法)
    min_val、MAX_VAL、min_loc、max_loc = cv2.minMaxLoc(RES)

    一致が差TM_SQDIFF又はTM_SQDIFF_NORMEDに一致する正規化された正方形の差の二乗の場合#、最小値をとります
    もしにおける方法[cv2.TM_SQDIFF、cv2.TM_SQDIFF_NORMED]:
        TOP_LEFT = min_loc
    そうしないと:
        TOP_LEFT = max_loc
    BOTTOM_RIGHT =(TOP_LEFT [0] +、W TOP_LEFT [1] + H)
    cv2.circle(RES、TOP_LEFT、10、0、2)
    #四角形を描画|
    cv2.rectangle(IMG2、TOP_LEFT、BOTTOM_RIGHT、(0、255、0)、2)

  

マルチオブジェクトマッチング

✔️シングルマッチが最大のマッチポイントを見つけることです、それは一度だけ一致させることができます。

✔️マルチオブジェクトマッチングのために、私たちは、時代に合わせて、試合のしきい値を設定する必要があります。

img_rgb = cv2.imread( 'mario.jpg')
img_gray = cv2.cvtColor(img_rgb、cv2.COLOR_BGR2GRAY)
テンプレート= cv2.imread( 'mario_coin.jpg'、0)
H、W = template.shape [2]

RES = cv2.matchTemplate(img_gray、テンプレート、cv2.TM_CCOEFF_NORMED)
しきい値= 0.8
#80%一致度の大きい座標乗り
LOC = np.where(RES> =閾値)

ジップでPTのために(* LOC [::  -  1]):#*数字は、オプションのパラメータを示しています
    BOTTOM_RIGHT =(PT [0] + PT、W [1] + H)
    cv2.rectangle(img_rgb、PT、BOTTOM_RIGHT、(0、0、255)、2)
cv2.imshow( 'img_rgb'、img_rgb)
cv2.waitKey(0)

  

 

おすすめ

転載: www.cnblogs.com/kekeoutlook/p/12399286.html