#! /usr/bin/env python
# -*- coding: utf-8 -*-#
# -------------------------------------------------------------------------------
# Name: 图片模糊度计算
# Author: yunhgu
# Date: 2021/8/20 11:01
# Description:
# -------------------------------------------------------------------------------
import shutil
from traceback import format_exc
import cv2
from pathlib import Path
from PIL import Image
import numpy as np
def ImageToMatrix(file):
# 读取图片
im = Image.open(file)
# 显示图片
# im.show()
width, height = im.size
im = im.convert("L")
data = im.getdata()
data = np.matrix(data, dtype=‘float‘) / 255.0
new_data = np.reshape(data, (height, width))
return new_data
def Brenner(img):
x, y = img.shape
D = 0
for i in range(x - 2):
for j in range(y - 2):
D += (img[i + 2, j] - img[i, j]) ** 2
return D
def variance_of_laplacian(image):
return cv2.Laplacian(image, cv2.CV_64F).var()
def main(input_path, output_path):
for file in Path(input_path).rglob("*.jpg"):
# 拉普拉斯算子
image = cv2.imdecode(np.fromfile(file, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
fm = variance_of_laplacian(gray)
# Brenner 检测
frame = ImageToMatrix(file)
score = Brenner(frame)
print(fm, score)
# result = Path(output_path).joinpath("no_clear")
# if fm >= 90:
# result = Path(output_path).joinpath("90")
# elif fm >= 80:
# result = Path(output_path).joinpath("80")
# elif fm >= 70:
# result = Path(output_path).joinpath("70")
# elif fm >= 60:
# result = Path(output_path).joinpath("60")
# elif fm >= 50:
# result = Path(output_path).joinpath("50")
# elif fm >= 40:
# result = Path(output_path).joinpath("40")
# elif fm >= 30:
# result = Path(output_path).joinpath("30")
# elif fm >= 20:
# result = Path(output_path).joinpath("20")
# elif fm >= 10:
# result = Path(output_path).joinpath("10")
#
# result.mkdir(parents=True, exist_ok=True)
# shutil.copy(file, result)
if __name__ == ‘__main__‘:
print("Start...")
# input_Folder = input("请输入源文件夹:")
# output_Folder = input("请输入结果文件夹:")
input_Folder = r"F:\pythonProject\图片模糊度计算\color"
output_Folder = r"F:\pythonProject\图片模糊度计算\result"
try:
main(input_Folder, output_Folder)
print("finished")
except Exception as err:
print(f"程序运行失败!!!请联系数据处理中心:{err}")
print(format_exc())
input("按任意键盘退出!!!")
python3 opencv 获取图片模糊度