Python OpenCV에서 이미지를 검색하고 판정 결과를 반환했습니다.

배경



이미지의 일부에 검색하려는 이미지가 포함되어 있는지 여부
판정하고 싶은 생각에 얽혀 있었으므로 해 보았습니다.
원 화상의 일치한 부분을 사각형으로 둘러싸고 표시/저장하는 선례는 있었습니다만,
판정 결과를 수치로 돌려주는 예가 별로 없었기 때문에, 투고.

이런 이미지 ↓↓↓
(왼쪽: 검색 대상 이미지, 오른쪽: 검색하려는 이미지)
(왼쪽 이미지를 자르고 오른쪽 이미지를 만들고 있습니다)


환경



MacOS Mojave ver10.14.4
Anaconda Navigator 1.9.7
※Anaconda의 인스톨은, 여기 를 참고로
JupiterNotebook 5.4.0
OpenCV 3.4.2
※OpenCV의 인스톨은 이전 기사
"초보자가 python Anaconda GUI에서 쉽게 OpenCV를 설치해 본다"
htps : // 이 m / 안산시 / ms / 88df7db49f77f65fbf

절차



정책



원화상과 원화상을 트리밍한 비교 화상을 부분 일치 검색을 거친다!
가장 높은 유사도가 임계 값을 초과하는지 여부를 결정합니다!
판정 결과를 돌려준다

구현



먼저 OpenCV를 사용하기 위해 라이브러리를 가져옵니다.
import cv2  #OpenCVをインポート

이미지의 일치율을 결정하는 함수 설정
def Judge_Matching(num):
    if 0.99 < num:
        return True
    else:
        return False

이미지를 로드하여 이미지의 일부가 포함되어 있는지 검색
※OpenCV의 matchTemplate 함수의 구조는 여기 을 알기 쉬웠습니다.
※TM_CCORR_NORMED는, 유사도의 계산 방법의 일종. 그 밖에도 여러가지 있는 것 같습니다.
# 検索元/先画像を読み込み
image = cv2.imread('./imagesFolder/temp/temp_moto.png') #検索先画像のファイルパスを指定
template = cv2.imread('./imagesFolder/temp_template/temp_saki.png') #検索元画像ファイルパスを指定

#OpenCVで画像部分一致を検索
result = cv2.matchTemplate(image, template, cv2.TM_CCORR_NORMED)

# 最も類似度が高い位置と低い位置を取得します
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)

#類似度が閾値を超えているか判定(上で作った関数を使用)
Judg = Judge_Matching(maxVal)

#結果を出力
print(Judg)
# (実行結果→)True or False


실행 예 ↓↓↓


끝에



이미지의 일부 검색 결과를 출력할 수 있습니다.
다음은 지정한 폴더 내의 여러 이미지에 대해 검색을 하고 싶습니다.

참고



htp : // py에서. 하테나 bぉg. 코 m / 엔 트리 / 오펜 cv - mp ぁ 테마 t 친g
htp // thr3 아. 하테나 bぉg. 코m/엔트리/20150727/1437973061

좋은 웹페이지 즐겨찾기