如何使用OpenCV(Python/C++)消除图像的模糊程度

9
我正在使用OpenCV来检测实时视频中的人物。我需要保存被检测到的人的图像。但是这里的人物不是站着不动的,而是在不停地移动,因此当我要保存图像时,它以非常模糊的格式保存,就像下面的图像一样:
如您所见,该图像不太清晰,有许多模糊。面部也不清晰。有没有办法从图像中去除模糊?谢谢

减少曝光时间。无论如何去卷积,都无法使面部更加清晰可辨认。 - Cris Luengo
2个回答

14

您可以尝试使用cv2.filter2D()和通用的锐化内核来锐化图像

以下是其他可供尝试的锐化内核

import cv2
import numpy as np

image = cv2.imread('1.jpg')
sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharpen = cv2.filter2D(image, -1, sharpen_kernel)

cv2.imshow('sharpen', sharpen)
cv2.waitKey()

1
你能详细说明一下你是如何想出这个滤波器[[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]的吗?你分享的维基文章中有一个不同的滤波器。我尝试实现了unsharp masking滤波器(如文章所示),但结果并不如预期。 - Sabito stands with Ukraine
这只是维基上的另一个锐化滤镜。 - nathancy

4
如@nathancy所建议,您可以尝试使用基于形态学的操作,这适用于所有情况,但需要根据图像形状、噪声水平进行滤波器尺寸调整,并且还会导致图像质量下降。
最近,生成对抗网络(GAN)也引起了人们对于图像重建的关注,并且在图像质量提升方面似乎很有前途。
本文(https://medium.com/machine-learning-world/deblur-photos-using-generic-pix2pix-6f8774f9701e)描述了一种基于GAN(基于Pix2Pix模型)的图像去模糊解决方案,这也可能适用于您的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接