第1步。检测图像中的脸部,裁剪脸部并保存。
图片形状:[1000, 970, 3]
第2步。将较小的裁剪图像与原始图像进行比较,看看是否找到了足够的匹配项,以及它们是否是正确的匹配项。 (眼对眼,不是眼睛对树)
图像形状:[60, 60, 3]
第1步工作正常。
第2步识别出许多匹配项,但它们过于模糊,无法使用,因为您无法真正信任该结果。
这是我用于第1步的代码的一部分:
for (x, y, w, h) in faces:
count += 1
crop_img = image[y:y + w, x:x + h]
r = 200 / crop_img.shape[1]
dim = (200, int(crop_img.shape[0] * r))
crop_img = cv2.resize(crop_img, dim, interpolation=cv2.INTER_AREA)
cv2.imwrite('images/college/' + str(count) + '.jpg', crop_img)
以下是我比较图像的方法:
img1 = cv2.imread(testImage)
img2 = cv2.imread('images/Class-of-2018.jpg')
# plt.imshow(img2), plt.show()
MIN_MATCH_COUNT = 100
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
good = bf.match(des1, des2)
good = sorted(good, key=lambda x: x.distance)
附加代码用于显示图像的哪些部分匹配,如果需要,我可以发布。
我想知道这是否是解决此类问题的正确方法。或者,还有更好的方法?也许我必须为图像中的每个人训练一个分类器( FaceRecognizer )?如果是的话,我应该怎么做?