76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
import cv2
|
|
from matplotlib import pyplot as plt
|
|
from numpy import floor
|
|
|
|
method = cv2.TM_SQDIFF_NORMED
|
|
|
|
# Read the images from the file
|
|
energy_image = cv2.imread('glyphs-a-energy.png', cv2.IMREAD_GRAYSCALE)
|
|
large_image = cv2.imread('radofdispear.png', cv2.IMREAD_GRAYSCALE)
|
|
|
|
orb = cv2.ORB_create()
|
|
|
|
# screenshot = cv2.resize(large_image, down_points, interpolation= cv2.INTER_LINEAR)
|
|
|
|
|
|
for i in range(64):
|
|
mod8 = i % 8
|
|
|
|
x1 = (int(floor(i / 8))) * 256
|
|
y1 = (int(mod8)) * 192
|
|
|
|
x2 = x1 + 256
|
|
y2 = y1 + 192
|
|
|
|
# print(x1, y1, x2, y2)
|
|
small_image = energy_image[y1:y2, x1:x2]
|
|
# print(small_image)
|
|
plt.imshow(small_image)
|
|
plt.show()
|
|
|
|
kp1, des1 = orb.detectAndCompute(small_image, None)
|
|
kp2, des2 = orb.detectAndCompute(large_image, None)
|
|
|
|
img1 = small_image
|
|
img2 = large_image
|
|
|
|
# result = cv2.matchTemplate(small_image, large_image, method)
|
|
|
|
# print(result)
|
|
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
|
|
# Match descriptors.
|
|
matches = bf.match(des1, des2)
|
|
# Sort them in the order of their distance.
|
|
matches = sorted(matches, key=lambda x: x.distance)
|
|
# Draw first 10 matches.
|
|
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
|
|
|
|
img3 = cv2.resize(img3, dsize=(int(3840 / 2), int(2180 / 2)))
|
|
|
|
cv2.imshow('output', img3)
|
|
cv2.waitKey(0)
|
|
break
|
|
# break
|
|
# # We want the minimum squared difference
|
|
# mn, _, mnLoc, _ = cv2.minMaxLoc(result)
|
|
# #
|
|
# # Draw the rectangle:
|
|
# # Extract the coordinates of our best match
|
|
# MPx, MPy = mnLoc
|
|
#
|
|
# print(MPx, MPy)
|
|
# #
|
|
# # # Step 2: Get the size of the template. This is the same size as the match.
|
|
# # trows, tcols = small_image.shape[:2]
|
|
# #
|
|
# # # Step 3: Draw the rectangle on large_image
|
|
# # cv2.rectangle(large_image, (MPx, MPy), (MPx + tcols, MPy + trows), (0, 0, 255), 2)
|
|
# cv2.imshow('output', small_image)
|
|
# cv2.waitKey(0)
|
|
# break
|
|
# # Display the original image with the rectangle around the match.
|
|
# cv2.imshow('output', large_image)
|
|
#
|
|
# # The image is only displayed if we call this
|
|
#
|