OpenCV将面部与小分辨率图像进行比较蟒

时间:2017-07-26 12:23:47

标签: python image opencv face-recognition

第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 )?如果是的话,我应该怎么做?

0 个答案:

没有答案