1from __future__ import print_function 2import sys 3import cv2 as cv 4 5## [global_variables] 6use_mask = False 7img = None 8templ = None 9mask = None 10image_window = "Source Image" 11result_window = "Result window" 12 13match_method = 0 14max_Trackbar = 5 15## [global_variables] 16 17def main(argv): 18 19 if (len(sys.argv) < 3): 20 print('Not enough parameters') 21 print('Usage:\nmatch_template_demo.py <image_name> <template_name> [<mask_name>]') 22 return -1 23 24 ## [load_image] 25 global img 26 global templ 27 img = cv.imread(sys.argv[1], cv.IMREAD_COLOR) 28 templ = cv.imread(sys.argv[2], cv.IMREAD_COLOR) 29 30 if (len(sys.argv) > 3): 31 global use_mask 32 use_mask = True 33 global mask 34 mask = cv.imread( sys.argv[3], cv.IMREAD_COLOR ) 35 36 if ((img is None) or (templ is None) or (use_mask and (mask is None))): 37 print('Can\'t read one of the images') 38 return -1 39 ## [load_image] 40 41 ## [create_windows] 42 cv.namedWindow( image_window, cv.WINDOW_AUTOSIZE ) 43 cv.namedWindow( result_window, cv.WINDOW_AUTOSIZE ) 44 ## [create_windows] 45 46 ## [create_trackbar] 47 trackbar_label = 'Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED' 48 cv.createTrackbar( trackbar_label, image_window, match_method, max_Trackbar, MatchingMethod ) 49 ## [create_trackbar] 50 51 MatchingMethod(match_method) 52 53 ## [wait_key] 54 cv.waitKey(0) 55 return 0 56 ## [wait_key] 57 58def MatchingMethod(param): 59 60 global match_method 61 match_method = param 62 63 ## [copy_source] 64 img_display = img.copy() 65 ## [copy_source] 66 ## [match_template] 67 method_accepts_mask = (cv.TM_SQDIFF == match_method or match_method == cv.TM_CCORR_NORMED) 68 if (use_mask and method_accepts_mask): 69 result = cv.matchTemplate(img, templ, match_method, None, mask) 70 else: 71 result = cv.matchTemplate(img, templ, match_method) 72 ## [match_template] 73 74 ## [normalize] 75 cv.normalize( result, result, 0, 1, cv.NORM_MINMAX, -1 ) 76 ## [normalize] 77 ## [best_match] 78 _minVal, _maxVal, minLoc, maxLoc = cv.minMaxLoc(result, None) 79 ## [best_match] 80 81 ## [match_loc] 82 if (match_method == cv.TM_SQDIFF or match_method == cv.TM_SQDIFF_NORMED): 83 matchLoc = minLoc 84 else: 85 matchLoc = maxLoc 86 ## [match_loc] 87 88 ## [imshow] 89 cv.rectangle(img_display, matchLoc, (matchLoc[0] + templ.shape[0], matchLoc[1] + templ.shape[1]), (0,0,0), 2, 8, 0 ) 90 cv.rectangle(result, matchLoc, (matchLoc[0] + templ.shape[0], matchLoc[1] + templ.shape[1]), (0,0,0), 2, 8, 0 ) 91 cv.imshow(image_window, img_display) 92 cv.imshow(result_window, result) 93 ## [imshow] 94 pass 95 96if __name__ == "__main__": 97 main(sys.argv[1:]) 98