Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV将人脸与小分辨率图像进行比较| Python_Python_Image_Opencv_Face Recognition - Fatal编程技术网

OpenCV将人脸与小分辨率图像进行比较| Python

OpenCV将人脸与小分辨率图像进行比较| Python,python,image,opencv,face-recognition,Python,Image,Opencv,Face Recognition,步骤1。检测图像中的人脸,裁剪人脸并保存 图像形状:[1000970,3] 步骤2。将较小的裁剪图像与原始图像进行比较,查看是否找到足够的匹配项,以及它们是否正确匹配。(眼睛对眼睛,而不是眼睛对树) 图像形状:[60,60,3] 第一步很好 第2步识别出许多匹配项,但它们太模糊,没有任何用处,因为您不能真正信任该结果 下面是我在步骤1中使用的代码的子集: for (x, y, w, h) in faces: count += 1 crop_img = image[

步骤1。检测图像中的人脸,裁剪人脸并保存

图像形状:
[1000970,3]

步骤2。将较小的裁剪图像与原始图像进行比较,查看是否找到足够的匹配项,以及它们是否正确匹配。(眼睛对眼睛,而不是眼睛对树)

图像形状:
[60,60,3]

第一步很好

第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)
额外的代码用于显示图像的哪些部分匹配,如果需要,我可以发布


我想知道这是否是解决此类问题的正确方法。还是有更好的办法?也许我必须为图像中的每个人训练分类器(人脸识别器)?如果是,我应该怎么做?

由于图像大小差异很大,ORB的默认参数不够好。可能您可以更改检测器/描述符的参数,或者两者都可以,因为ORB不是完全的比例不变。让我试试。@RickM。谢谢有没有一种方法可以成功地预测/选择最小匹配数?最小匹配数的确切含义是什么?你能详细说明一下吗?我的意思是,由于脚本在后台运行,没有人实际查看结果,那么在声明人脸存在(是同一个人)之前,找到的匹配的阈值应该是多少?