python3 opencv 获取图片模糊度

#! /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 获取图片模糊度

上一篇:c++中的bitwise操作


下一篇:python运算符