如何在opencv python中裁剪帧中的面而不丢失质量
我有一个如何在opencv python中裁剪帧中的面而不丢失质量,python,opencv,computer-vision,image-scaling,Python,Opencv,Computer Vision,Image Scaling,我有一个计算机视觉项目,我正在从usb摄像头的实时视频源中推断。虽然这款相机是罗技全高清相机,但由于安装问题,它的安装位置与人们通常工作的地方有点远。应用程序检测人脸,如果该人脸未被识别或不在数据库中,应用程序将开始保存人脸图像,以便这些图像可用于重新训练人脸识别模型 以下是整个管道的工作原理: Frame -> Person detection in frame -> Person tracking starts |-> Face dete
计算机视觉
项目,我正在从usb摄像头的实时视频源中推断。虽然这款相机是罗技全高清相机,但由于安装问题,它的安装位置与人们通常工作的地方有点远。应用程序检测人脸,如果该人脸未被识别或不在数据库中,应用程序将开始保存人脸图像,以便这些图像可用于重新训练人脸识别模型
以下是整个管道的工作原理:
Frame -> Person detection in frame -> Person tracking starts
|-> Face detection from person image -> Face recognition
|-> If unrecognized starts saving face images
现在让我们拍摄下一帧图像:
正如您所看到的,图像非常清晰,脸部清晰可见。现在,在此上运行人员检测
并保存人员图像后,它看起来如下所示:
现在,如果我们在上面的人物图像中检测到人脸并保存人脸图像,它如下所示:
现在你可以看到,人脸图像的大小非常小,因此我们需要调整它的大小,使其正确可见。因此,调整大小后,它看起来如下所示:
现在调整大小后,它看起来有点模糊,因此有时会被人脸识别忽略或无法识别。下面是我用来保存和调整图像大小的代码:
width = face_endX - face_startX
height = face_endY - face_startY
face_image = person_image[face_startY:face_startY + height, face_startX:face_startX + width]
scale_percent = 150
width = int(face_image.shape[1] * scale_percent / 100)
height = int(face_image.shape[0] * scale_percent / 100)
dim = (width, height)
resized_img = cv2.resize(image, dim, interpolation=cv2.INTER_LANCZOS4)
cv2.imwrite("face_image.jpg", resized_img)
所以在上面的代码中,我首先得到宽度和高度,然后使用面边界框坐标,创建一个面图像。然后,我将缩放百分比设置为150,然后调整图像大小并保存图像
有没有人能帮我推荐一些好的方法,让图像可以调整一点大小,同时保持图像质量。你正在做我能想到的一切。两个小建议,1。您可以尝试不同的插值方法,例如立方体。2.在写入图像时,默认情况下,它以95%的质量压缩为jpg,要么将质量参数增加到99,要么将图像另存为.png以压缩质量的最后一位。@Baraa我将尝试使用
立方插值
,但老实说,所有插值对我来说都是一样的。你能解释更多关于压缩成jpg,质量为95%
并另存为.png
的信息吗。将图像另存为.png
是否保留图像质量。?cv2.imwrite
具有设置jpg质量速率的选项。您可以这样设置:cv2.imwrite(res\u path,res,[int(cv2.imwrite\u JPEG\u QUALITY),100])
此外,如果您将图像扩展名设置为.png
,它将以无损png格式保存。我认为这两种方法都不会有太大的区别,但值得一试。你不能简单地通过调整大小来增加图像中的信息。你得到的小图像是你所有的像素。如您所见,增加图像大小只是将信息分散到更大的区域。为了避免进一步的插值,您可以不调整正在拍摄的图像的大小。或者只将其调整到某个大小以上。你正在做我能想到的一切。两个小建议,1。您可以尝试不同的插值方法,例如立方体。2.在写入图像时,默认情况下,它以95%的质量压缩为jpg,要么将质量参数增加到99,要么将图像另存为.png以压缩质量的最后一位。@Baraa我将尝试使用立方插值
,但老实说,所有插值对我来说都是一样的。你能解释更多关于压缩成jpg,质量为95%
并另存为.png
的信息吗。将图像另存为.png
是否保留图像质量。?cv2.imwrite
具有设置jpg质量速率的选项。您可以这样设置:cv2.imwrite(res\u path,res,[int(cv2.imwrite\u JPEG\u QUALITY),100])
此外,如果您将图像扩展名设置为.png
,它将以无损png格式保存。我认为这两种方法都不会有太大的区别,但值得一试。你不能简单地通过调整大小来增加图像中的信息。你得到的小图像是你所有的像素。如您所见,增加图像大小只是将信息分散到更大的区域。为了避免进一步的插值,您可以不调整正在拍摄的图像的大小。或者只将其调整到某个大小以上。