1 回答
![?](http://img1.sycdn.imooc.com/54584d6100015f5802200220-100-100.jpg)
TA贡献1828条经验 获得超4个赞
您需要组合两个列表来比较相同的图像。
您可以使用zip:
import cv2
a = [1]
b = [1]
for i, j in zip(a, b):
original = cv2.imread("image_old/imageOld_" + str(i) + ".jpg")
image_to_compare = cv2.imread("image_new/imageNew_" + str(j) + ".jpg")
image1 = original.shape
image2 = image_to_compare.shape
if original.shape == image_to_compare.shape:
print("The images " + str(i) + " have same size and channels")
print("Diffing page " + str(i) + " and " + str(j) + " of both pdfs")
difference = cv2.subtract(original, image_to_compare)
r, g, b = cv2.split(difference)
cv2.imshow("difference", cv2.resize(difference, None, fx=0.3, fy=0.3))
if cv2.countNonZero(b) == 0 and cv2.countNonZero(g) == 0 and cv2.countNonZero(r) == 0:
print("The images are completely Equal")
else:
print("The images are not equal")
sift = cv2.xfeatures2d.SIFT_create()
kp_1, desc_1 = sift.detectAndCompute(original, None)
kp_2, desc_2 = sift.detectAndCompute(image_to_compare, None)
print("Keypoints of 1st image: " + str(len(kp_1)))
print("Keypoints of 2nd image: " + str(len(kp_2)))
index_params = dict(algorithm=0, trees=5)
search_params = dict()
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(desc_1, desc_2, k=2)
good_points = []
for m, n in matches:
if m.distance < 0.6 * n.distance:
good_points.append(m)
print('The images have %d %s' % (len(good_points), "good points matches"))
if len(kp_1) <= len(kp_2):
number_keypoints = len(kp_1)
else:
number_keypoints = len(kp_2)
percentage_similarity = len(good_points) / number_keypoints * 100
print('Similarity %d %s' % (round((percentage_similarity)), "%\n"))
result = cv2.drawMatches(original, kp_1, image_to_compare, kp_2, good_points, None)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
The images 1 have same size and channels
Diffing page 1 and 1 of both pdfs
The images are completely Equal
Keypoints of 1st image: 8066
Keypoints of 2nd image: 8066
The images have 3117 good points matches
Similarity 39 %
imagesNew_1.jpg以下是我用于和的示例imagesOld_1.jpg
添加回答
举报