def test_that_match_all_can_be_used_with_ocr_to_read_buttons(): # Demonstrates how match_all can be used with ocr for UIs consisting of text # on buttons frame = _imread('buttons.png') button = _imread('button.png') text = [ stbt.ocr(frame=cv2.absdiff(_crop(frame, m.region), button)) for m in stbt.match_all( button, frame=frame, match_parameters=mp(confirm_method='none'))] text = sorted([t for t in text if t not in ['', '\\s']]) print text assert text == [u'Button 1', u'Button 2', u'Buttons']
def test_that_match_all_can_find_labelled_matches(): plain_buttons = [stbt.Region(x, y, width=135, height=44) for x, y in [ (28, 1), (163, 1), (177, 75), (177, 119), (177, 163), (298, 1)]] labelled_buttons = [stbt.Region(x, y, width=135, height=44) for x, y in [ (1, 65), (6, 137), (123, 223)]] overlapped_button = stbt.Region(3, 223, width=135, height=44) frame = _imread('buttons.png') matches = list(m.region for m in stbt.match_all( 'button.png', frame=frame, match_parameters=mp(confirm_method='none'))) print matches assert overlapped_button not in matches assert sorted(plain_buttons + labelled_buttons) == sorted(matches)
def test_that_results_dont_overlap(): # This is a regression test for a bug seen in an earlier implementation of # `match_all`. frame = _imread("action-panel.png") all_matches = set() for m in stbt.match_all( "action-panel-template.png", frame=frame, match_parameters=mp(confirm_method="normed-absdiff")): print m assert m.region not in all_matches, "Match %s already seen:\n %s" % ( m, "\n ".join(str(x) for x in all_matches)) assert all(stbt.Region.intersect(m.region, x) is None for x in all_matches) all_matches.add(m.region) assert all_matches == set([ stbt.Region(x=135, y=433, width=222, height=40), stbt.Region(x=135, y=477, width=222, height=40), stbt.Region(x=135, y=521, width=222, height=40), stbt.Region(x=135, y=565, width=222, height=40), stbt.Region(x=135, y=609, width=222, height=40)])
def test_match_all_image_debug_with_normed_absdiff(): with scoped_curdir(), scoped_debug_level(2): matches = list(stbt.match_all( "button.png", frame=_imread("buttons.png"), match_parameters=mp(confirm_method="normed-absdiff", confirm_threshold=0.3))) print matches assert len(matches) == 6 _verify_stbt_debug_dir([ 'index.html', 'level0-source.png', 'level0-source_matchtemplate.png', 'level0-source_matchtemplate_threshold.png', 'level0-source_with_match.png', 'level0-source_with_rois.png', 'level0-template.png', 'level1-source.png', 'level1-source_matchtemplate.png', 'level1-source_matchtemplate_threshold.png', 'level1-source_with_match.png', 'level1-source_with_rois.png', 'level1-template.png', 'level2-source.png', 'level2-source_matchtemplate.png', 'level2-source_matchtemplate_threshold.png', 'level2-source_with_match.png', 'level2-source_with_rois.png', 'level2-template.png', 'match0-confirm-absdiff.png', 'match0-confirm-absdiff_threshold.png', 'match0-confirm-absdiff_threshold_erode.png', 'match0-confirm-source_roi.png', 'match0-confirm-source_roi_gray.png', 'match0-confirm-source_roi_gray_normalized.png', 'match0-confirm-template_gray.png', 'match0-confirm-template_gray_normalized.png', 'match0-heatmap.png', 'match0-source_with_match.png', 'match1-confirm-absdiff.png', 'match1-confirm-absdiff_threshold.png', 'match1-confirm-absdiff_threshold_erode.png', 'match1-confirm-source_roi.png', 'match1-confirm-source_roi_gray.png', 'match1-confirm-source_roi_gray_normalized.png', 'match1-confirm-template_gray.png', 'match1-confirm-template_gray_normalized.png', 'match1-heatmap.png', 'match1-source_with_match.png', 'match2-confirm-absdiff.png', 'match2-confirm-absdiff_threshold.png', 'match2-confirm-absdiff_threshold_erode.png', 'match2-confirm-source_roi.png', 'match2-confirm-source_roi_gray.png', 'match2-confirm-source_roi_gray_normalized.png', 'match2-confirm-template_gray.png', 'match2-confirm-template_gray_normalized.png', 'match2-heatmap.png', 'match2-source_with_match.png', 'match3-confirm-absdiff.png', 'match3-confirm-absdiff_threshold.png', 'match3-confirm-absdiff_threshold_erode.png', 'match3-confirm-source_roi.png', 'match3-confirm-source_roi_gray.png', 'match3-confirm-source_roi_gray_normalized.png', 'match3-confirm-template_gray.png', 'match3-confirm-template_gray_normalized.png', 'match3-heatmap.png', 'match3-source_with_match.png', 'match4-confirm-absdiff.png', 'match4-confirm-absdiff_threshold.png', 'match4-confirm-absdiff_threshold_erode.png', 'match4-confirm-source_roi.png', 'match4-confirm-source_roi_gray.png', 'match4-confirm-source_roi_gray_normalized.png', 'match4-confirm-template_gray.png', 'match4-confirm-template_gray_normalized.png', 'match4-heatmap.png', 'match4-source_with_match.png', 'match5-confirm-absdiff.png', 'match5-confirm-absdiff_threshold.png', 'match5-confirm-absdiff_threshold_erode.png', 'match5-confirm-source_roi.png', 'match5-confirm-source_roi_gray.png', 'match5-confirm-source_roi_gray_normalized.png', 'match5-confirm-template_gray.png', 'match5-confirm-template_gray_normalized.png', 'match5-heatmap.png', 'match5-source_with_match.png', 'match6-confirm-absdiff.png', 'match6-confirm-absdiff_threshold.png', 'match6-confirm-absdiff_threshold_erode.png', 'match6-confirm-source_roi.png', 'match6-confirm-source_roi_gray.png', 'match6-confirm-source_roi_gray_normalized.png', 'match6-confirm-template_gray.png', 'match6-confirm-template_gray_normalized.png', 'match6-heatmap.png', 'match6-source_with_match.png', 'source.png', 'template.png' ])
def test_match_debug(): # So that the output directory name doesn't depend on how many tests # were run before this one. ImageLogger._frame_number = itertools.count(1) # pylint:disable=protected-access with scoped_curdir(), scoped_debug_level(2): # First pass gives no matches: matches = list( stbt.match_all( "videotestsrc-redblue-flipped.png", frame=stbt.load_image("videotestsrc-full-frame.png"))) print matches assert len(matches) == 0 # Multiple matches; first pass stops with a non-match: matches = list( stbt.match_all("button.png", frame=stbt.load_image("buttons.png"), match_parameters=mp(match_threshold=0.995))) print matches assert len(matches) == 6 # Multiple matches; second pass stops with a non-match: matches = list( stbt.match_all("button.png", frame=stbt.load_image("buttons.png"))) print matches assert len(matches) == 6 # With absdiff: matches = list( stbt.match_all("button.png", frame=stbt.load_image("buttons.png"), match_parameters=mp(confirm_method="absdiff", confirm_threshold=0.16))) print matches assert len(matches) == 6 files = subprocess.check_output("find stbt-debug | sort", shell=True) assert files == dedent("""\ stbt-debug stbt-debug/00001 stbt-debug/00001/index.html stbt-debug/00001/level2-source_matchtemplate.png stbt-debug/00001/level2-source.png stbt-debug/00001/level2-source_with_match.png stbt-debug/00001/level2-source_with_rois.png stbt-debug/00001/level2-template.png stbt-debug/00001/match0-heatmap.png stbt-debug/00001/match0-source_with_match.png stbt-debug/00001/source.png stbt-debug/00001/source_with_matches.png stbt-debug/00001/template.png stbt-debug/00002 stbt-debug/00002/index.html stbt-debug/00002/level0-source_matchtemplate.png stbt-debug/00002/level0-source_matchtemplate_threshold.png stbt-debug/00002/level0-source.png stbt-debug/00002/level0-source_with_match.png stbt-debug/00002/level0-source_with_rois.png stbt-debug/00002/level0-template.png stbt-debug/00002/level1-source_matchtemplate.png stbt-debug/00002/level1-source_matchtemplate_threshold.png stbt-debug/00002/level1-source.png stbt-debug/00002/level1-source_with_match.png stbt-debug/00002/level1-source_with_rois.png stbt-debug/00002/level1-template.png stbt-debug/00002/level2-source_matchtemplate.png stbt-debug/00002/level2-source_matchtemplate_threshold.png stbt-debug/00002/level2-source.png stbt-debug/00002/level2-source_with_match.png stbt-debug/00002/level2-source_with_rois.png stbt-debug/00002/level2-template.png stbt-debug/00002/match0-confirm-absdiff.png stbt-debug/00002/match0-confirm-absdiff_threshold_erode.png stbt-debug/00002/match0-confirm-absdiff_threshold.png stbt-debug/00002/match0-confirm-source_roi_gray_normalized.png stbt-debug/00002/match0-confirm-source_roi_gray.png stbt-debug/00002/match0-confirm-source_roi.png stbt-debug/00002/match0-confirm-template_gray_normalized.png stbt-debug/00002/match0-confirm-template_gray.png stbt-debug/00002/match0-heatmap.png stbt-debug/00002/match0-source_with_match.png stbt-debug/00002/match1-confirm-absdiff.png stbt-debug/00002/match1-confirm-absdiff_threshold_erode.png stbt-debug/00002/match1-confirm-absdiff_threshold.png stbt-debug/00002/match1-confirm-source_roi_gray_normalized.png stbt-debug/00002/match1-confirm-source_roi_gray.png stbt-debug/00002/match1-confirm-source_roi.png stbt-debug/00002/match1-confirm-template_gray_normalized.png stbt-debug/00002/match1-confirm-template_gray.png stbt-debug/00002/match1-heatmap.png stbt-debug/00002/match1-source_with_match.png stbt-debug/00002/match2-confirm-absdiff.png stbt-debug/00002/match2-confirm-absdiff_threshold_erode.png stbt-debug/00002/match2-confirm-absdiff_threshold.png stbt-debug/00002/match2-confirm-source_roi_gray_normalized.png stbt-debug/00002/match2-confirm-source_roi_gray.png stbt-debug/00002/match2-confirm-source_roi.png stbt-debug/00002/match2-confirm-template_gray_normalized.png stbt-debug/00002/match2-confirm-template_gray.png stbt-debug/00002/match2-heatmap.png stbt-debug/00002/match2-source_with_match.png stbt-debug/00002/match3-confirm-absdiff.png stbt-debug/00002/match3-confirm-absdiff_threshold_erode.png stbt-debug/00002/match3-confirm-absdiff_threshold.png stbt-debug/00002/match3-confirm-source_roi_gray_normalized.png stbt-debug/00002/match3-confirm-source_roi_gray.png stbt-debug/00002/match3-confirm-source_roi.png stbt-debug/00002/match3-confirm-template_gray_normalized.png stbt-debug/00002/match3-confirm-template_gray.png stbt-debug/00002/match3-heatmap.png stbt-debug/00002/match3-source_with_match.png stbt-debug/00002/match4-confirm-absdiff.png stbt-debug/00002/match4-confirm-absdiff_threshold_erode.png stbt-debug/00002/match4-confirm-absdiff_threshold.png stbt-debug/00002/match4-confirm-source_roi_gray_normalized.png stbt-debug/00002/match4-confirm-source_roi_gray.png stbt-debug/00002/match4-confirm-source_roi.png stbt-debug/00002/match4-confirm-template_gray_normalized.png stbt-debug/00002/match4-confirm-template_gray.png stbt-debug/00002/match4-heatmap.png stbt-debug/00002/match4-source_with_match.png stbt-debug/00002/match5-confirm-absdiff.png stbt-debug/00002/match5-confirm-absdiff_threshold_erode.png stbt-debug/00002/match5-confirm-absdiff_threshold.png stbt-debug/00002/match5-confirm-source_roi_gray_normalized.png stbt-debug/00002/match5-confirm-source_roi_gray.png stbt-debug/00002/match5-confirm-source_roi.png stbt-debug/00002/match5-confirm-template_gray_normalized.png stbt-debug/00002/match5-confirm-template_gray.png stbt-debug/00002/match5-heatmap.png stbt-debug/00002/match5-source_with_match.png stbt-debug/00002/match6-heatmap.png stbt-debug/00002/match6-source_with_match.png stbt-debug/00002/source.png stbt-debug/00002/source_with_matches.png stbt-debug/00002/template.png stbt-debug/00003 stbt-debug/00003/index.html stbt-debug/00003/level0-source_matchtemplate.png stbt-debug/00003/level0-source_matchtemplate_threshold.png stbt-debug/00003/level0-source.png stbt-debug/00003/level0-source_with_match.png stbt-debug/00003/level0-source_with_rois.png stbt-debug/00003/level0-template.png stbt-debug/00003/level1-source_matchtemplate.png stbt-debug/00003/level1-source_matchtemplate_threshold.png stbt-debug/00003/level1-source.png stbt-debug/00003/level1-source_with_match.png stbt-debug/00003/level1-source_with_rois.png stbt-debug/00003/level1-template.png stbt-debug/00003/level2-source_matchtemplate.png stbt-debug/00003/level2-source_matchtemplate_threshold.png stbt-debug/00003/level2-source.png stbt-debug/00003/level2-source_with_match.png stbt-debug/00003/level2-source_with_rois.png stbt-debug/00003/level2-template.png stbt-debug/00003/match0-confirm-absdiff.png stbt-debug/00003/match0-confirm-absdiff_threshold_erode.png stbt-debug/00003/match0-confirm-absdiff_threshold.png stbt-debug/00003/match0-confirm-source_roi_gray_normalized.png stbt-debug/00003/match0-confirm-source_roi_gray.png stbt-debug/00003/match0-confirm-source_roi.png stbt-debug/00003/match0-confirm-template_gray_normalized.png stbt-debug/00003/match0-confirm-template_gray.png stbt-debug/00003/match0-heatmap.png stbt-debug/00003/match0-source_with_match.png stbt-debug/00003/match1-confirm-absdiff.png stbt-debug/00003/match1-confirm-absdiff_threshold_erode.png stbt-debug/00003/match1-confirm-absdiff_threshold.png stbt-debug/00003/match1-confirm-source_roi_gray_normalized.png stbt-debug/00003/match1-confirm-source_roi_gray.png stbt-debug/00003/match1-confirm-source_roi.png stbt-debug/00003/match1-confirm-template_gray_normalized.png stbt-debug/00003/match1-confirm-template_gray.png stbt-debug/00003/match1-heatmap.png stbt-debug/00003/match1-source_with_match.png stbt-debug/00003/match2-confirm-absdiff.png stbt-debug/00003/match2-confirm-absdiff_threshold_erode.png stbt-debug/00003/match2-confirm-absdiff_threshold.png stbt-debug/00003/match2-confirm-source_roi_gray_normalized.png stbt-debug/00003/match2-confirm-source_roi_gray.png stbt-debug/00003/match2-confirm-source_roi.png stbt-debug/00003/match2-confirm-template_gray_normalized.png stbt-debug/00003/match2-confirm-template_gray.png stbt-debug/00003/match2-heatmap.png stbt-debug/00003/match2-source_with_match.png stbt-debug/00003/match3-confirm-absdiff.png stbt-debug/00003/match3-confirm-absdiff_threshold_erode.png stbt-debug/00003/match3-confirm-absdiff_threshold.png stbt-debug/00003/match3-confirm-source_roi_gray_normalized.png stbt-debug/00003/match3-confirm-source_roi_gray.png stbt-debug/00003/match3-confirm-source_roi.png stbt-debug/00003/match3-confirm-template_gray_normalized.png stbt-debug/00003/match3-confirm-template_gray.png stbt-debug/00003/match3-heatmap.png stbt-debug/00003/match3-source_with_match.png stbt-debug/00003/match4-confirm-absdiff.png stbt-debug/00003/match4-confirm-absdiff_threshold_erode.png stbt-debug/00003/match4-confirm-absdiff_threshold.png stbt-debug/00003/match4-confirm-source_roi_gray_normalized.png stbt-debug/00003/match4-confirm-source_roi_gray.png stbt-debug/00003/match4-confirm-source_roi.png stbt-debug/00003/match4-confirm-template_gray_normalized.png stbt-debug/00003/match4-confirm-template_gray.png stbt-debug/00003/match4-heatmap.png stbt-debug/00003/match4-source_with_match.png stbt-debug/00003/match5-confirm-absdiff.png stbt-debug/00003/match5-confirm-absdiff_threshold_erode.png stbt-debug/00003/match5-confirm-absdiff_threshold.png stbt-debug/00003/match5-confirm-source_roi_gray_normalized.png stbt-debug/00003/match5-confirm-source_roi_gray.png stbt-debug/00003/match5-confirm-source_roi.png stbt-debug/00003/match5-confirm-template_gray_normalized.png stbt-debug/00003/match5-confirm-template_gray.png stbt-debug/00003/match5-heatmap.png stbt-debug/00003/match5-source_with_match.png stbt-debug/00003/match6-confirm-absdiff.png stbt-debug/00003/match6-confirm-absdiff_threshold_erode.png stbt-debug/00003/match6-confirm-absdiff_threshold.png stbt-debug/00003/match6-confirm-source_roi_gray_normalized.png stbt-debug/00003/match6-confirm-source_roi_gray.png stbt-debug/00003/match6-confirm-source_roi.png stbt-debug/00003/match6-confirm-template_gray_normalized.png stbt-debug/00003/match6-confirm-template_gray.png stbt-debug/00003/match6-heatmap.png stbt-debug/00003/match6-source_with_match.png stbt-debug/00003/source.png stbt-debug/00003/source_with_matches.png stbt-debug/00003/template.png stbt-debug/00004 stbt-debug/00004/index.html stbt-debug/00004/level0-source_matchtemplate.png stbt-debug/00004/level0-source_matchtemplate_threshold.png stbt-debug/00004/level0-source.png stbt-debug/00004/level0-source_with_match.png stbt-debug/00004/level0-source_with_rois.png stbt-debug/00004/level0-template.png stbt-debug/00004/level1-source_matchtemplate.png stbt-debug/00004/level1-source_matchtemplate_threshold.png stbt-debug/00004/level1-source.png stbt-debug/00004/level1-source_with_match.png stbt-debug/00004/level1-source_with_rois.png stbt-debug/00004/level1-template.png stbt-debug/00004/level2-source_matchtemplate.png stbt-debug/00004/level2-source_matchtemplate_threshold.png stbt-debug/00004/level2-source.png stbt-debug/00004/level2-source_with_match.png stbt-debug/00004/level2-source_with_rois.png stbt-debug/00004/level2-template.png stbt-debug/00004/match0-confirm-absdiff.png stbt-debug/00004/match0-confirm-absdiff_threshold_erode.png stbt-debug/00004/match0-confirm-absdiff_threshold.png stbt-debug/00004/match0-confirm-source_roi_gray.png stbt-debug/00004/match0-confirm-source_roi.png stbt-debug/00004/match0-confirm-template_gray.png stbt-debug/00004/match0-heatmap.png stbt-debug/00004/match0-source_with_match.png stbt-debug/00004/match1-confirm-absdiff.png stbt-debug/00004/match1-confirm-absdiff_threshold_erode.png stbt-debug/00004/match1-confirm-absdiff_threshold.png stbt-debug/00004/match1-confirm-source_roi_gray.png stbt-debug/00004/match1-confirm-source_roi.png stbt-debug/00004/match1-confirm-template_gray.png stbt-debug/00004/match1-heatmap.png stbt-debug/00004/match1-source_with_match.png stbt-debug/00004/match2-confirm-absdiff.png stbt-debug/00004/match2-confirm-absdiff_threshold_erode.png stbt-debug/00004/match2-confirm-absdiff_threshold.png stbt-debug/00004/match2-confirm-source_roi_gray.png stbt-debug/00004/match2-confirm-source_roi.png stbt-debug/00004/match2-confirm-template_gray.png stbt-debug/00004/match2-heatmap.png stbt-debug/00004/match2-source_with_match.png stbt-debug/00004/match3-confirm-absdiff.png stbt-debug/00004/match3-confirm-absdiff_threshold_erode.png stbt-debug/00004/match3-confirm-absdiff_threshold.png stbt-debug/00004/match3-confirm-source_roi_gray.png stbt-debug/00004/match3-confirm-source_roi.png stbt-debug/00004/match3-confirm-template_gray.png stbt-debug/00004/match3-heatmap.png stbt-debug/00004/match3-source_with_match.png stbt-debug/00004/match4-confirm-absdiff.png stbt-debug/00004/match4-confirm-absdiff_threshold_erode.png stbt-debug/00004/match4-confirm-absdiff_threshold.png stbt-debug/00004/match4-confirm-source_roi_gray.png stbt-debug/00004/match4-confirm-source_roi.png stbt-debug/00004/match4-confirm-template_gray.png stbt-debug/00004/match4-heatmap.png stbt-debug/00004/match4-source_with_match.png stbt-debug/00004/match5-confirm-absdiff.png stbt-debug/00004/match5-confirm-absdiff_threshold_erode.png stbt-debug/00004/match5-confirm-absdiff_threshold.png stbt-debug/00004/match5-confirm-source_roi_gray.png stbt-debug/00004/match5-confirm-source_roi.png stbt-debug/00004/match5-confirm-template_gray.png stbt-debug/00004/match5-heatmap.png stbt-debug/00004/match5-source_with_match.png stbt-debug/00004/match6-confirm-absdiff.png stbt-debug/00004/match6-confirm-absdiff_threshold_erode.png stbt-debug/00004/match6-confirm-absdiff_threshold.png stbt-debug/00004/match6-confirm-source_roi_gray.png stbt-debug/00004/match6-confirm-source_roi.png stbt-debug/00004/match6-confirm-template_gray.png stbt-debug/00004/match6-heatmap.png stbt-debug/00004/match6-source_with_match.png stbt-debug/00004/source.png stbt-debug/00004/source_with_matches.png stbt-debug/00004/template.png """) assert_expected("stbt-debug-expected-output/match")
def test_match_debug(): # So that the output directory name doesn't depend on how many tests # were run before this one. ImageLogger._frame_number = itertools.count(1) # pylint:disable=protected-access with scoped_curdir(), scoped_debug_level(2): # First pass gives no matches: matches = list(stbt.match_all( "videotestsrc-redblue-flipped.png", frame=stbt.load_image("videotestsrc-full-frame.png"))) print matches assert len(matches) == 0 # Multiple matches; first pass stops with a non-match: matches = list(stbt.match_all( "button.png", frame=stbt.load_image("buttons.png"), match_parameters=mp(match_threshold=0.995))) print matches assert len(matches) == 6 # Multiple matches; second pass stops with a non-match: matches = list(stbt.match_all( "button.png", frame=stbt.load_image("buttons.png"))) print matches assert len(matches) == 6 # With absdiff: matches = list(stbt.match_all( "button.png", frame=stbt.load_image("buttons.png"), match_parameters=mp(confirm_method="absdiff", confirm_threshold=0.84))) print matches assert len(matches) == 6 files = subprocess.check_output("find stbt-debug | sort", shell=True) assert files == dedent("""\ stbt-debug stbt-debug/00001 stbt-debug/00001/index.html stbt-debug/00001/level2-source_matchtemplate.png stbt-debug/00001/level2-source.png stbt-debug/00001/level2-source_with_match.png stbt-debug/00001/level2-source_with_rois.png stbt-debug/00001/level2-template.png stbt-debug/00001/match0-heatmap.png stbt-debug/00001/match0-source_with_match.png stbt-debug/00001/source.png stbt-debug/00001/source_with_matches.png stbt-debug/00001/template.png stbt-debug/00002 stbt-debug/00002/index.html stbt-debug/00002/level0-source_matchtemplate.png stbt-debug/00002/level0-source_matchtemplate_threshold.png stbt-debug/00002/level0-source.png stbt-debug/00002/level0-source_with_match.png stbt-debug/00002/level0-source_with_rois.png stbt-debug/00002/level0-template.png stbt-debug/00002/level1-source_matchtemplate.png stbt-debug/00002/level1-source_matchtemplate_threshold.png stbt-debug/00002/level1-source.png stbt-debug/00002/level1-source_with_match.png stbt-debug/00002/level1-source_with_rois.png stbt-debug/00002/level1-template.png stbt-debug/00002/level2-source_matchtemplate.png stbt-debug/00002/level2-source_matchtemplate_threshold.png stbt-debug/00002/level2-source.png stbt-debug/00002/level2-source_with_match.png stbt-debug/00002/level2-source_with_rois.png stbt-debug/00002/level2-template.png stbt-debug/00002/match0-confirm-absdiff.png stbt-debug/00002/match0-confirm-absdiff_threshold_erode.png stbt-debug/00002/match0-confirm-absdiff_threshold.png stbt-debug/00002/match0-confirm-source_roi_gray_normalized.png stbt-debug/00002/match0-confirm-source_roi_gray.png stbt-debug/00002/match0-confirm-source_roi.png stbt-debug/00002/match0-confirm-template_gray_normalized.png stbt-debug/00002/match0-confirm-template_gray.png stbt-debug/00002/match0-heatmap.png stbt-debug/00002/match0-source_with_match.png stbt-debug/00002/match1-confirm-absdiff.png stbt-debug/00002/match1-confirm-absdiff_threshold_erode.png stbt-debug/00002/match1-confirm-absdiff_threshold.png stbt-debug/00002/match1-confirm-source_roi_gray_normalized.png stbt-debug/00002/match1-confirm-source_roi_gray.png stbt-debug/00002/match1-confirm-source_roi.png stbt-debug/00002/match1-confirm-template_gray_normalized.png stbt-debug/00002/match1-confirm-template_gray.png stbt-debug/00002/match1-heatmap.png stbt-debug/00002/match1-source_with_match.png stbt-debug/00002/match2-confirm-absdiff.png stbt-debug/00002/match2-confirm-absdiff_threshold_erode.png stbt-debug/00002/match2-confirm-absdiff_threshold.png stbt-debug/00002/match2-confirm-source_roi_gray_normalized.png stbt-debug/00002/match2-confirm-source_roi_gray.png stbt-debug/00002/match2-confirm-source_roi.png stbt-debug/00002/match2-confirm-template_gray_normalized.png stbt-debug/00002/match2-confirm-template_gray.png stbt-debug/00002/match2-heatmap.png stbt-debug/00002/match2-source_with_match.png stbt-debug/00002/match3-confirm-absdiff.png stbt-debug/00002/match3-confirm-absdiff_threshold_erode.png stbt-debug/00002/match3-confirm-absdiff_threshold.png stbt-debug/00002/match3-confirm-source_roi_gray_normalized.png stbt-debug/00002/match3-confirm-source_roi_gray.png stbt-debug/00002/match3-confirm-source_roi.png stbt-debug/00002/match3-confirm-template_gray_normalized.png stbt-debug/00002/match3-confirm-template_gray.png stbt-debug/00002/match3-heatmap.png stbt-debug/00002/match3-source_with_match.png stbt-debug/00002/match4-confirm-absdiff.png stbt-debug/00002/match4-confirm-absdiff_threshold_erode.png stbt-debug/00002/match4-confirm-absdiff_threshold.png stbt-debug/00002/match4-confirm-source_roi_gray_normalized.png stbt-debug/00002/match4-confirm-source_roi_gray.png stbt-debug/00002/match4-confirm-source_roi.png stbt-debug/00002/match4-confirm-template_gray_normalized.png stbt-debug/00002/match4-confirm-template_gray.png stbt-debug/00002/match4-heatmap.png stbt-debug/00002/match4-source_with_match.png stbt-debug/00002/match5-confirm-absdiff.png stbt-debug/00002/match5-confirm-absdiff_threshold_erode.png stbt-debug/00002/match5-confirm-absdiff_threshold.png stbt-debug/00002/match5-confirm-source_roi_gray_normalized.png stbt-debug/00002/match5-confirm-source_roi_gray.png stbt-debug/00002/match5-confirm-source_roi.png stbt-debug/00002/match5-confirm-template_gray_normalized.png stbt-debug/00002/match5-confirm-template_gray.png stbt-debug/00002/match5-heatmap.png stbt-debug/00002/match5-source_with_match.png stbt-debug/00002/match6-heatmap.png stbt-debug/00002/match6-source_with_match.png stbt-debug/00002/source.png stbt-debug/00002/source_with_matches.png stbt-debug/00002/template.png stbt-debug/00003 stbt-debug/00003/index.html stbt-debug/00003/level0-source_matchtemplate.png stbt-debug/00003/level0-source_matchtemplate_threshold.png stbt-debug/00003/level0-source.png stbt-debug/00003/level0-source_with_match.png stbt-debug/00003/level0-source_with_rois.png stbt-debug/00003/level0-template.png stbt-debug/00003/level1-source_matchtemplate.png stbt-debug/00003/level1-source_matchtemplate_threshold.png stbt-debug/00003/level1-source.png stbt-debug/00003/level1-source_with_match.png stbt-debug/00003/level1-source_with_rois.png stbt-debug/00003/level1-template.png stbt-debug/00003/level2-source_matchtemplate.png stbt-debug/00003/level2-source_matchtemplate_threshold.png stbt-debug/00003/level2-source.png stbt-debug/00003/level2-source_with_match.png stbt-debug/00003/level2-source_with_rois.png stbt-debug/00003/level2-template.png stbt-debug/00003/match0-confirm-absdiff.png stbt-debug/00003/match0-confirm-absdiff_threshold_erode.png stbt-debug/00003/match0-confirm-absdiff_threshold.png stbt-debug/00003/match0-confirm-source_roi_gray_normalized.png stbt-debug/00003/match0-confirm-source_roi_gray.png stbt-debug/00003/match0-confirm-source_roi.png stbt-debug/00003/match0-confirm-template_gray_normalized.png stbt-debug/00003/match0-confirm-template_gray.png stbt-debug/00003/match0-heatmap.png stbt-debug/00003/match0-source_with_match.png stbt-debug/00003/match1-confirm-absdiff.png stbt-debug/00003/match1-confirm-absdiff_threshold_erode.png stbt-debug/00003/match1-confirm-absdiff_threshold.png stbt-debug/00003/match1-confirm-source_roi_gray_normalized.png stbt-debug/00003/match1-confirm-source_roi_gray.png stbt-debug/00003/match1-confirm-source_roi.png stbt-debug/00003/match1-confirm-template_gray_normalized.png stbt-debug/00003/match1-confirm-template_gray.png stbt-debug/00003/match1-heatmap.png stbt-debug/00003/match1-source_with_match.png stbt-debug/00003/match2-confirm-absdiff.png stbt-debug/00003/match2-confirm-absdiff_threshold_erode.png stbt-debug/00003/match2-confirm-absdiff_threshold.png stbt-debug/00003/match2-confirm-source_roi_gray_normalized.png stbt-debug/00003/match2-confirm-source_roi_gray.png stbt-debug/00003/match2-confirm-source_roi.png stbt-debug/00003/match2-confirm-template_gray_normalized.png stbt-debug/00003/match2-confirm-template_gray.png stbt-debug/00003/match2-heatmap.png stbt-debug/00003/match2-source_with_match.png stbt-debug/00003/match3-confirm-absdiff.png stbt-debug/00003/match3-confirm-absdiff_threshold_erode.png stbt-debug/00003/match3-confirm-absdiff_threshold.png stbt-debug/00003/match3-confirm-source_roi_gray_normalized.png stbt-debug/00003/match3-confirm-source_roi_gray.png stbt-debug/00003/match3-confirm-source_roi.png stbt-debug/00003/match3-confirm-template_gray_normalized.png stbt-debug/00003/match3-confirm-template_gray.png stbt-debug/00003/match3-heatmap.png stbt-debug/00003/match3-source_with_match.png stbt-debug/00003/match4-confirm-absdiff.png stbt-debug/00003/match4-confirm-absdiff_threshold_erode.png stbt-debug/00003/match4-confirm-absdiff_threshold.png stbt-debug/00003/match4-confirm-source_roi_gray_normalized.png stbt-debug/00003/match4-confirm-source_roi_gray.png stbt-debug/00003/match4-confirm-source_roi.png stbt-debug/00003/match4-confirm-template_gray_normalized.png stbt-debug/00003/match4-confirm-template_gray.png stbt-debug/00003/match4-heatmap.png stbt-debug/00003/match4-source_with_match.png stbt-debug/00003/match5-confirm-absdiff.png stbt-debug/00003/match5-confirm-absdiff_threshold_erode.png stbt-debug/00003/match5-confirm-absdiff_threshold.png stbt-debug/00003/match5-confirm-source_roi_gray_normalized.png stbt-debug/00003/match5-confirm-source_roi_gray.png stbt-debug/00003/match5-confirm-source_roi.png stbt-debug/00003/match5-confirm-template_gray_normalized.png stbt-debug/00003/match5-confirm-template_gray.png stbt-debug/00003/match5-heatmap.png stbt-debug/00003/match5-source_with_match.png stbt-debug/00003/match6-confirm-absdiff.png stbt-debug/00003/match6-confirm-absdiff_threshold_erode.png stbt-debug/00003/match6-confirm-absdiff_threshold.png stbt-debug/00003/match6-confirm-source_roi_gray_normalized.png stbt-debug/00003/match6-confirm-source_roi_gray.png stbt-debug/00003/match6-confirm-source_roi.png stbt-debug/00003/match6-confirm-template_gray_normalized.png stbt-debug/00003/match6-confirm-template_gray.png stbt-debug/00003/match6-heatmap.png stbt-debug/00003/match6-source_with_match.png stbt-debug/00003/source.png stbt-debug/00003/source_with_matches.png stbt-debug/00003/template.png stbt-debug/00004 stbt-debug/00004/index.html stbt-debug/00004/level0-source_matchtemplate.png stbt-debug/00004/level0-source_matchtemplate_threshold.png stbt-debug/00004/level0-source.png stbt-debug/00004/level0-source_with_match.png stbt-debug/00004/level0-source_with_rois.png stbt-debug/00004/level0-template.png stbt-debug/00004/level1-source_matchtemplate.png stbt-debug/00004/level1-source_matchtemplate_threshold.png stbt-debug/00004/level1-source.png stbt-debug/00004/level1-source_with_match.png stbt-debug/00004/level1-source_with_rois.png stbt-debug/00004/level1-template.png stbt-debug/00004/level2-source_matchtemplate.png stbt-debug/00004/level2-source_matchtemplate_threshold.png stbt-debug/00004/level2-source.png stbt-debug/00004/level2-source_with_match.png stbt-debug/00004/level2-source_with_rois.png stbt-debug/00004/level2-template.png stbt-debug/00004/match0-confirm-absdiff.png stbt-debug/00004/match0-confirm-absdiff_threshold_erode.png stbt-debug/00004/match0-confirm-absdiff_threshold.png stbt-debug/00004/match0-confirm-source_roi_gray.png stbt-debug/00004/match0-confirm-source_roi.png stbt-debug/00004/match0-confirm-template_gray.png stbt-debug/00004/match0-heatmap.png stbt-debug/00004/match0-source_with_match.png stbt-debug/00004/match1-confirm-absdiff.png stbt-debug/00004/match1-confirm-absdiff_threshold_erode.png stbt-debug/00004/match1-confirm-absdiff_threshold.png stbt-debug/00004/match1-confirm-source_roi_gray.png stbt-debug/00004/match1-confirm-source_roi.png stbt-debug/00004/match1-confirm-template_gray.png stbt-debug/00004/match1-heatmap.png stbt-debug/00004/match1-source_with_match.png stbt-debug/00004/match2-confirm-absdiff.png stbt-debug/00004/match2-confirm-absdiff_threshold_erode.png stbt-debug/00004/match2-confirm-absdiff_threshold.png stbt-debug/00004/match2-confirm-source_roi_gray.png stbt-debug/00004/match2-confirm-source_roi.png stbt-debug/00004/match2-confirm-template_gray.png stbt-debug/00004/match2-heatmap.png stbt-debug/00004/match2-source_with_match.png stbt-debug/00004/match3-confirm-absdiff.png stbt-debug/00004/match3-confirm-absdiff_threshold_erode.png stbt-debug/00004/match3-confirm-absdiff_threshold.png stbt-debug/00004/match3-confirm-source_roi_gray.png stbt-debug/00004/match3-confirm-source_roi.png stbt-debug/00004/match3-confirm-template_gray.png stbt-debug/00004/match3-heatmap.png stbt-debug/00004/match3-source_with_match.png stbt-debug/00004/match4-confirm-absdiff.png stbt-debug/00004/match4-confirm-absdiff_threshold_erode.png stbt-debug/00004/match4-confirm-absdiff_threshold.png stbt-debug/00004/match4-confirm-source_roi_gray.png stbt-debug/00004/match4-confirm-source_roi.png stbt-debug/00004/match4-confirm-template_gray.png stbt-debug/00004/match4-heatmap.png stbt-debug/00004/match4-source_with_match.png stbt-debug/00004/match5-confirm-absdiff.png stbt-debug/00004/match5-confirm-absdiff_threshold_erode.png stbt-debug/00004/match5-confirm-absdiff_threshold.png stbt-debug/00004/match5-confirm-source_roi_gray.png stbt-debug/00004/match5-confirm-source_roi.png stbt-debug/00004/match5-confirm-template_gray.png stbt-debug/00004/match5-heatmap.png stbt-debug/00004/match5-source_with_match.png stbt-debug/00004/match6-confirm-absdiff.png stbt-debug/00004/match6-confirm-absdiff_threshold_erode.png stbt-debug/00004/match6-confirm-absdiff_threshold.png stbt-debug/00004/match6-confirm-source_roi_gray.png stbt-debug/00004/match6-confirm-source_roi.png stbt-debug/00004/match6-confirm-template_gray.png stbt-debug/00004/match6-heatmap.png stbt-debug/00004/match6-source_with_match.png stbt-debug/00004/source.png stbt-debug/00004/source_with_matches.png stbt-debug/00004/template.png """) assert_expected("stbt-debug-expected-output/match")