【图像处理】Python判断一张图像是否亮度过低,图片模糊判定

news2024/9/22 5:25:29

文章目录

  • 亮度判断
  • 模糊判断

亮度判断

比如:
在这里插入图片描述
直方图:
在这里插入图片描述

代码:

这段代码是一个用于判断图像亮度是否过暗的函数is_dark,并对输入的图像进行可视化直方图展示。

首先,通过import语句导入了cv2和matplotlib.pyplot模块,用于图像处理和可视化。

is_dark函数的作用是判断输入图像的平均亮度是否低于设定的阈值。函数接受两个参数:image_path表示图像文件的路径,threshold表示亮度阈值,默认为100。函数内部的步骤如下:

使用cv2.imread函数读取图像文件,将图像存储在变量img中。
使用cv2.cvtColor函数将图像转换为灰度图像,存储在变量gray中。
使用cv2.mean函数计算灰度图像的平均亮度,存储在变量average_brightness中。
判断average_brightness是否低于设定的阈值threshold,如果是,则返回True表示图像光线过暗;否则返回False表示图像光线正常。
接下来是测试代码部分:

定义了一个图像文件的路径image_path,这里是一个示例路径,请根据实际情况修改。
调用is_dark函数判断图像光线是否过暗,如果返回True,说明图像光线过暗,输出"图片光线过暗";如果返回False,说明图像光线正常,输出"图片光线正常"。
最后,使用cv2.imread函数再次读取图像文件,将图像存储在变量img中。然后使用plt.hist函数绘制灰度图像的直方图,并通过plt.xlabel和plt.ylabel设置横轴和纵轴的标签。最后使用plt.show显示直方图。这样可以直观地查看图像的亮度分布情况。

import cv2
import matplotlib.pyplot as plt


def is_dark(image_path, threshold=100):
    # 读取图像
    img = cv2.imread(image_path)

    # 转换为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 计算灰度图像的平均亮度
    average_brightness = cv2.mean(gray)[0]

    # 判断亮度是否低于阈值
    if average_brightness < threshold:
        return True
    else:
        return False


# 测试代码
image_path = r'E:\facedata\img_data_new\10001normal_face\10001normal_face_0.5893__041430.jpg'
if is_dark(image_path):
    print("图片光线过暗")
else:
    print("图片光线正常")

# 可视化直方图
img = cv2.imread(image_path)
plt.hist(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).ravel(), bins=256, color='gray')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.show()

模糊判断

import os

import cv2
from tqdm import tqdm


def is_blurry(image_path):
    image = cv2.imread(image_path)
    if image is None:
        raise Exception("无法读取图片")

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur_score = cv2.Laplacian(gray, cv2.CV_64F).var()

    return str(round(blur_score * 100)).rjust(10, "0")


def listPathAllfiles(dirname):
    result = []
    for maindir, subdir, file_name_list in os.walk(dirname):
        for filename in file_name_list:
            apath = os.path.join(maindir, filename)
            result.append(apath)
    return result


windowspath = r"E:\facedata\img_data_new"
files = listPathAllfiles(windowspath)
for filename in tqdm(files):
    try:
        num = is_blurry(filename)
    except:
        num = str(round(0 * 100)).rjust(10, "0")

    new_file_name = num + "____" + os.path.basename(filename)
    new_file_name = os.path.join(os.path.dirname(filename), new_file_name)
    os.rename(filename, new_file_name)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言---数据结构实验---顺序表的合并---链表的基本操作---重点解析约瑟夫问题

文章目录 顺序表的合并代码实现代码下载 链表的基本操作代码实现代码下载 约瑟夫问题问题分析代码实现 本篇展示数据结构的两个实验 其中&#xff0c;重点分析约瑟夫问题 实验中代码的命名风格等均与下方博客风格类似&#xff0c;全程手撕图解 对顺序表和链表不清楚有以下文…

平衡小车学习教程2(软件篇)——MPU6050数据读取欧拉角,移植DMP读取Roll角、Pitch角、Yaw角

前言 上一篇&#xff0c;给大家介绍了平衡小车的硬件资源及其小车底层硬件介绍篇 平衡小车学习教程1——硬件资源及其小车底层硬件介绍篇 这篇来教大家如何快速的使用MPU6050自带的DMP库读取陀螺仪数据&#xff0c;读取翻滚角(Roll)、俯仰角(Pitch)、航向角(Yaw)这三个角的数…

卖家如何做好独立站?这些要点要牢记!

随着跨境电商第三方平台的竞争压力越来越大&#xff0c;以及平台流量红利期迎来大幅缩水&#xff0c;使得越来越多的跨境卖家开始另寻出路&#xff0c;建设自己的品牌。而独立站的优势特点&#xff0c;在当下的市场竞争环境中优势更为突出&#xff0c;这也使得众多卖家涌入独立…

05-MySQL-基础篇-SQL之DQL语句

SQL之DQL语句 前言DQL准备数据基础语法基本查询条件查询集合函数分组查询排序查询分页查询执行顺序 前言 本篇来学习下SQL中的DQL语句 DQL 英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记录。 准备数据 # 删除表…

Spring框架概述及核心设计思想

文章目录 一. Spring框架概述1. 什么是Spring框架2. 为什么要学习框架&#xff1f;3. Spring框架学习的难点 二. Spring核心设计思想1. 容器是什么&#xff1f;2. IoC是什么&#xff1f;3. Spring是IoC容器4. DI&#xff08;依赖注入&#xff09; 一. Spring框架概述 1. 什么是…

芜湖,埋点还可以这么做?这也太简单了

目录 前言 一个埋点的Demo 安装依赖 添加测试代码 编写入口文件 编写插件 运行Demo 处理_tracker的import 改进 给其他的函数类型添加埋点 处理埋点函数变量名 总结&#xff1a; 前言 在项目开发中通常会有埋点的需求&#xff0c;然而当项目过于庞大&#xff0c;给…

聚焦型光场相机基于立体视差的深度估计原理

聚焦型光场相机可以看作是主透镜将物面成了一个放大或者缩小的虚像&#xff0c;然后每个微透镜阵列对这个经过放大或者缩小的虚像进行二次成像后投影在了ccd平面&#xff0c;其中二次成像的过程可以比拟为一个虚拟阵列相机&#xff0c;利用MLA和主透镜的相关参数就可以以立体视…

Java开发基础系列(三):数据操作

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(三):数据操作 ⏱️ 创作时间&#xff1a; 2023年07月…

Java线程池实现原理

随着计算机行业的飞速发展&#xff0c;摩尔定律逐渐失效&#xff0c;多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池&#xff1a;ThreadPoolExecutor类&#xff0c;帮助开发人员管理线程并方便地执行并行任务。了解并合理使…

x86架构ubuntu22下运行3DS模拟器Citra

0. 环境 i5 ubuntu22&#xff08;安装系统时候选择 自动上网下载第三方驱动软件&#xff0c;主要是显卡驱动opengl&#xff09; 1. apt安装依赖 1.1 SDL2 sudo apt install libsdl2-dev 1.2 OpenSSL (optional) sudo apt install libssl-dev 1.3 Qt 6.2 sudo apt install …

零基础学Python-必备工具安装

文章目录 1. Python 安装与卸载Python 安装包下载安装Python如何验证Python 安装成功扩展 电脑中其实可以装多个不同版本的python 卸载Python 2. Python 开发有哪些常用的IDEPyCharm 安装PyCharm 安装包下载安装PyCharm PyCharm 使用VScode 安装VScode 安装包下载安装VScodeVsc…

libbpf-bootstrap开发指南:网络包监测-tc

目录 前置知识 代码分析 BPF部分 功能说明 struct __sk_buff 说明 bpf_htons & bpf_ntohs 为什么有l2 1、l31 data 数据的排布 用户部分 功能说明 DECLARE_LIBBPF_OPTS 执行效果 前置知识 IP数据包的总长度指的是整个IP数据包的长度&#xff0c;包括IP头部和…

React(2)

题外话&#xff1a;vscode有个插件可以很方便的快速写代码 输入rcc回车 1.组件嵌套 import React, { Component } from reactclass Navbar extends Component{render(){return <div>Navbar</div>} }const Swiper()>{return <div>Swiper</div> }cons…

学习babylon.js --- [2] 项目工程搭建

本文讲述如何搭建babylonjs的项目工程。 一 准备 首先创建一个目录叫MyProject&#xff0c;然后在这个目录里再创建三个目录&#xff1a;dist&#xff0c;public和src&#xff0c;如下&#xff0c; 接着在src目录里添加一个文件叫app.ts&#xff0c;本文使用typescript&#…

论文笔记--PTR: Prompt Tuning with Rules for Text Classification

论文笔记--PTR: Prompt Tuning with Rules for Text Classification 1. 文章简介2. 文章概括3 文章重点技术3.1 Pre-training & Fine-tuning & Prompt-based Fine Tuning3.2 PTR(Prompt Tuning with Rules)3.3 task decomposition3.4 Sub-prompts composition3.5 多个l…

平衡二叉搜索树--AVL详解剖析

目录 一、什么是AVL树 二、AVL树的作用 三、树节点的定义 四、节点的插入 五、旋转 1.左单旋 2.右单旋 左右双旋代码 &#xff1a; 4.右左双旋 一、什么是AVL树 AVL树就是二叉搜索树的进一步的优化&#xff0c;二叉搜索树虽可以缩短查找的效率&#xff0c;但是当数据有…

SDN系统方法 | 1. 概述

随着互联网和数据中心流量的爆炸式增长&#xff0c;SDN已经逐步取代静态路由交换设备成为构建网络的主流方式&#xff0c;本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版&#xff0c;完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…

SpringFactoriesLoader解析

一、SpringFactoriesLoader 介绍 1.1 SpringFactoriesLoader 简介 SpringFactoriesLoader 工厂加载机制是 Spring 内部提供的一个约定俗成的加载方式&#xff0c;与 java spi 类似&#xff0c;只需要在模块的 META-INF/spring.factories 文件中&#xff0c;以 Properties 类型…

DOT slam论文翻译

DOT:视觉SLAM的动态目标跟踪 摘要 - 在本文中&#xff0c;我们提出了DOT(动态目标跟踪)&#xff0c;这是一个添加到现有SLAM系统中的前端&#xff0c;可以显着提高其在高动态环境中的鲁棒性和准确性。DOT结合实例分割和多视图几何来生成动态对象的掩模&#xff0c;以允许基于刚…

实现 Rollup 插件alias 并使用单元测试提高开发效率

本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 实现一个经常用的 rollup 插件 alias 首先执行npm init命令初始化一个package.json文件&#xff0c;因为插件使用了ty…