我尝试获取图像的模糊度。我参考this tutorial来计算开放式cv中laplacian的方差。
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与图像的大小有关吗?如果是这样,他们之间的关系是什么?或者是否有任何解决方案来评估不同尺寸图像的模糊度?
答案 0 :(得分:0)
“fm与图像大小有关吗?”
是部分(至少在您的问题方面),因为如果缩放图像,则必须插入像素值。降尺度不仅会丢失信息,还会通过像素插值创建新信息(如果它不是最近邻插值),从而影响结果图像的方差。但这仅适用于缩放图像,而不适用于首先不同的图像。