Сравнить изображения разного размера Python
Необходимо вычислить из какого изображения .jpg получена миниатюра .jpg, которая обрезана и уменьшена в размерах.
Т.е. сравнить два .jpg разного размера и пропорций на которых изображено одно и тоже.
Как происходит|производится такое сравнение?
Есть ли готовые инструменты на Python для такого сравнения?
Дайте, пожалуйста, пример.
Ответы (1 шт):
Автор решения: Ivan Ivanov
→ Ссылка
Ответ здесь: https://docs.opencv.org/4.x/da/df5/tutorial_py_sift_intro.html https://docs.opencv.org/4.x/db/d27/tutorial_py_table_of_contents_feature2d.html
import cv2 as cv
import matplotlib as plt
def compare_img(img_name1:str='', img_name2:str=''):
img1 = cv.imread(img_name1, cv.IMREAD_GRAYSCALE) # queryImage
img2 = cv.imread(img_name2, cv.IMREAD_GRAYSCALE) # trainImage
sift = cv.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# BFMatcher with default params
bf = cv.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
# cv.drawMatchesKnn expects list of lists as matches.
fl = cv.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS
img3 = cv.drawMatchesKnn(img1, kp1, img2, kp2, good, None, flags=fl)
plt.imshow(img3),plt.show()