In [17]:
from matplotlib import pyplot as plt
import cv2
import numpy as np

def plotImage(title,image):
    plt.figure(figsize=(20,12))
    plt.gray()
    plt.imshow(image)
    plt.title(title)
    plt.axis('off')
    plt.show()

# ORB
def Orb_descript_FLANN(imgA,imgB):
    MIN_MATCH_COUNT = 1
    orb = cv2.ORB_create()
    kpA, desA = orb.detectAndCompute(imgA,None)
    kpB, desB = orb.detectAndCompute(imgB,None)

    FLANN_INDEX_LSH = 6
    index_params= dict(algorithm = FLANN_INDEX_LSH,
                   table_number = 6, # 12
                   key_size = 12,     # 20
                   multi_probe_level = 1) #2
    search_params = dict(checks = 50)
    flann = cv2.FlannBasedMatcher(index_params, search_params)
    matches = flann.knnMatch(desA,desB,k=2)
    good = []
    for m,n in matches:
        if m.distance < 0.7*n.distance:
            good.append(m)
            print(kpA[m.queryIdx].pt)
            print(kpB[m.trainIdx].pt)

    if len(good)>MIN_MATCH_COUNT:
        src_pts = np.float32([kpA[m.queryIdx].pt for m in good]).reshape(-1,1,2)
        dst_pts = np.float32([kpB[m.trainIdx].pt for m in good]).reshape(-1,1,2)
        M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
        matchesMask = mask.ravel().tolist()
        h,w = imgA.shape
        pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
        dst = cv2.perspectiveTransform(pts,M)
        img2 = cv2.polylines(imgB,[np.int32(dst)],True,255,3, cv2.LINE_AA)
    else:
        #print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
        matchesMask = None

    draw_params = dict(matchColor = (0,255,0), # draw matches in green color
                       singlePointColor = (255,0,255),
                       matchesMask = matchesMask, # draw only inliers
                       flags = 2)

    img3 = cv2.drawMatches(imgA, kpA, imgB, kpB,good, None,**draw_params)
    #img3 = cv2.drawMatches(imgA,kpA,imgB,kpB,good,None,**draw_params)
    #plt.imshow(img3, 'gray'),plt.show()
    plotImage("ORB_FLANN  ", img3)

# AKAZE
def Akaze_descript_FLANN(imgA,imgB):
    MIN_MATCH_COUNT = 1
    akaze=cv2.AKAZE_create()
    kpA, desA = akaze.detectAndCompute(imgA,None)
    kpB, desB = akaze.detectAndCompute(imgB,None)

    FLANN_INDEX_LSH = 6
    index_params= dict(algorithm = FLANN_INDEX_LSH,
                   table_number = 6, # 12
                   key_size = 12,     # 20
                   multi_probe_level = 1) #2
    search_params = dict(checks = 50)
    flann = cv2.FlannBasedMatcher(index_params, search_params)
    matches = flann.knnMatch(desA,desB,k=2)
    good = []
    for m,n in matches:
        if m.distance < 0.7*n.distance:
            good.append(m)

    if len(good)>MIN_MATCH_COUNT:
        src_pts = np.float32([ kpA[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
        dst_pts = np.float32([ kpB[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
        M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
        matchesMask = mask.ravel().tolist()
        h,w = imgA.shape
        pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
        dst = cv2.perspectiveTransform(pts,M)
        img2 = cv2.polylines(imgB,[np.int32(dst)],True,255,3, cv2.LINE_AA)
    else:
        #print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
        matchesMask = None

    draw_params = dict(matchColor = (0,255,0), # draw matches in green color
                       singlePointColor = (255,0,255),
                       matchesMask = matchesMask, # draw only inliers
                       flags = 2)
    img3 = cv2.drawMatches(imgA, kpA, imgB, kpB, good[:], None, flags=2)
    #img3 = cv2.drawMatches(imgA,kpA,imgB,kpB,good,None,**draw_params)
    #plt.imshow(img3, 'gray'),plt.show()
    plotImage("ORB_FLANN  ", img3)

    
img11 = cv2.imread('./imagens_teste/_0/total_imagens/teste__1_1_1_0.png', 0)    
img22= cv2.imread ('./imagens_teste/_0/mosaicos/mosaico_1_1_1.png')

if img11 == None or img22 == None:
    print("Image load error.")
else:
    Orb_descript_FLANN(img11,img22)
    Akaze_descript_FLANN(img11,img22)


C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:104: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.
(138.0, 48.0)
(138.0, 48.0)
(99.0, 118.0)
(99.60000610351562, 118.80000305175781)
(117.0, 77.0)
(117.0, 77.0)
(134.0, 44.0)
(134.0, 44.0)
(49.0, 74.0)
(49.0, 74.0)
(32.0, 123.0)
(32.0, 122.0)
(134.0, 38.0)
(135.0, 38.0)
(65.0, 144.0)
(65.0, 144.0)
(146.0, 100.0)
(147.0, 100.0)
(134.40000915527344, 43.20000076293945)
(134.40000915527344, 43.20000076293945)
(134.40000915527344, 37.20000076293945)
(134.40000915527344, 37.20000076293945)
(99.60000610351562, 117.60000610351562)
(99.60000610351562, 118.80000305175781)
(104.4000015258789, 67.20000457763672)
(104.4000015258789, 67.20000457763672)
(103.68000793457031, 67.68000030517578)
(103.68000793457031, 67.68000030517578)
(151.20001220703125, 148.32000732421875)
(225.0, 132.0)
(99.36000061035156, 118.08000183105469)
(99.36000061035156, 118.08000183105469)
(64.80000305175781, 145.44000244140625)
(64.80000305175781, 144.0)
(143.42401123046875, 100.22400665283203)
(143.42401123046875, 100.22400665283203)
(103.68000793457031, 67.39200592041016)
(103.68000793457031, 67.68000030517578)
(103.68001556396484, 91.23841094970703)
(103.68001556396484, 93.31201171875)
(99.5328140258789, 109.90081787109375)
(101.60641479492188, 111.97441864013672)
(97.45921325683594, 116.12161254882812)
(101.60641479492188, 111.97441864013672)