我尝试获得图像的模糊度。我引用this tutorial来计算开放式简历中的拉普拉斯方差。
import cv2
def variance_of_laplacian(image):
return cv2.Laplacian(image, cv2.CV_64F).var()
def check_blurry(image):
"""
:param: the image
:return: True or False for blurry
"""
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
fm = variance_of_laplacian(gray)
return fm
当我尝试从两张图像中计算fm时,它们看起来完全相同,但大小不同。
filePath = 'small.jpeg'
image1 = cv2.imread(filePath)
print('small image shape', image1.shape)
print('small image fm', check_blurry(image1))
filePath = 'large.jpg'
image2 = cv2.imread(filePath)
print('large image shape', image2.shape)
print('large image fm', check_blurry(image2))
输出为:
small image shape (1440, 1080, 3)
small image fm 4.7882723403428065
large image shape (4032, 3024, 3)
large image fm 8.44476634687877
显然,小图像按比例缩小为大图像的2.8。 fm与图像大小有关吗?如果是这样,它们之间是什么关系?还是有解决方案来评估不同尺寸图像的模糊度?
最佳答案
“fm与图像大小有关吗?”
部分同意(至少就您的问题而言),因为如果缩放图像,则必须插入像素值。缩小比例不仅会丢失信息,还会通过像素插值(如果不是最近邻插值)创建新的信息,从而影响最终图像的方差。但这仅适用于缩放图像,不适用于最初不同的图像。