python:根据灰度值检查成像是否存在黑图情况

news2024/9/24 0:20:58

一、需求描述

1、摄像机在拍照的时候,会打开闪光灯进行拍照,假如闪光灯在拍照之后打开,就会产生黑图

2、因此,我们需要摄像机采集很多图片,检查是否每次拍照都是正常的

3、我们可以通过人眼进行查看,但是照片很多,难免有判断失误的时候

4、因此,我们设计一段python程序去识别黑图

二、设计思路

1、灰度值概念

由于景物各点的颜色及亮度不同,摄成的黑白照片上或电视接收机重现的黑白图像上各点呈现不同程度的灰色。把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像,在医学、图像识别领域有很广泛的用途。

2、黑色的图片接近于0,因此我们可以设置一个范围来判断是否为黑图,如0到50会被认定为黑图

三、程序设计

1、使用python求一张图片的平均灰度值

(1)创建py文件,命名为:根据灰度值检查成像是否存在黑图情况.py

(2)在D盘创建存图片的目录“黑图”,路径为:D:\黑图

(3)本段代码使用Python的Pillow库,并定义了函数image_gray来计算一张图片的平均灰度值,具体步骤如下:

①使用Image.open()方法打开一张图片,参数为图片路径,返回一个Image对象。
②使用width和height属性获取图片的宽度和高度,用于遍历所有像素点。
③定义变量gray_sum和count,分别用于累计灰度值和像素点数。
④使用两个嵌套的循环遍历所有像素点,获取像素点的灰度值,并将灰度值累加到gray_sum中。
⑤在每次循环中将count加1,用于统计像素点总数。
⑥计算平均灰度值,即gray_sum除以count。
⑦打印结果,即图片的平均灰度值。

这段代码中使用了Pillow库中的Image对象的getpixel()方法来获取每个像素点的灰度值,由于灰度值可能是一个数值,也可能是一个元组(RGB模式下),因此需要进行判断并使用不同的方式获取灰度值。如下是代码:

from PIL import Image

def image_gray():
    # 打开图片
    img = Image.open(r'D:\黑图\20221206093515451.png')

    # 计算平均灰度值
    gray_sum = 0
    count = 0
    for x in range(img.width):
        for y in range(img.height):
            if img.mode == "RGB":
                r, g, b = img.getpixel((x, y))
                gray_sum += (r + g + b) / 3
            elif img.mode == "L":
                gray_value = img.getpixel((x, y))
                gray_sum += gray_value
            count += 1

    avg_gray = gray_sum / count
    print("平均灰度值为:", avg_gray)



if __name__ == "__main__":
    image_gray()

2、使用python写一段程序遍历某个文件夹下所有文件

(1)因为图片不止一张,因此我们有必要遍历一整个文件夹的图片

import os

def find_image():
    # 定义要遍历的文件夹路径
    folder_path = r'D:\黑图'

    # 遍历文件夹下的所有文件
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            # 处理每个文件
            # 例如:打印文件路径
            print(file_path)

上面的代码中,os.walk()方法会遍历指定路径下的所有文件和子文件夹,返回一个三元组(root, dirs, files),其中root表示当前遍历的文件夹路径,dirs表示当前文件夹下的子文件夹列表,files表示当前文件夹下的文件列表。然后我们可以使用os.path.join()方法将当前文件的路径拼接出来,进而处理每个文件。

3、基于1、2的逻辑,我们来写一下判断黑图的逻辑

(1)修改1、2,让其更好被使用

(2)灰度值小于50被认为是黑图

import os
from PIL import Image

def image_gray(img):
    # 打开图片
    img = Image.open(img)

    # 计算平均灰度值
    gray_sum = 0
    count = 0
    for x in range(img.width):
        for y in range(img.height):
            if img.mode == "RGB":
                r, g, b = img.getpixel((x, y))
                gray_sum += (r + g + b) / 3
            elif img.mode == "L":
                gray_value = img.getpixel((x, y))
                gray_sum += gray_value
            count += 1

    avg_gray = gray_sum / count
    return avg_gray

def find_image(folder_path):
    # 定义一个列表存储图片路径
    images = []
    # 遍历文件夹下的所有文件
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            # 处理每个文件,将其添加到列表中
            images.append(file_path)
    return images

def assert_run(folder_path):
    images=find_image(folder_path)
    for img in images:
        gray = image_gray(img)
        # 灰度值小于50,将认为是黑图
        if gray < 50:
            print(img, ":", gray)

if __name__ == "__main__":
    # image_gray()
    # find_image()
    folder_path = r'D:\黑图'
    assert_run(folder_path)

4、测试验证如下

 

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

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

相关文章

SpringCloud入门实战(七)-Hystrix服务熔断入门案例

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术&#xff0c;都可以先去官网先看看&…

Mysql 学习(七)独立表结构存储 一

独立表空间结构 InnoDB有很多类型表空间&#xff0c;这边主要是介绍独立表空间结构&#xff0c;因为这种会用的比较多讲之前我们先思考一个问题&#xff0c;如果我们以页为单位来分配存储空间的话&#xff0c;那两个页之间的物理距离可能很远&#xff0c;因为这是随机的&#…

2023有哪些适合学生用蓝牙耳机?300左右最好的蓝牙耳机推荐

2023年了&#xff0c;蓝牙耳机常常伴随手机出现在人们的日常生活当中&#xff0c;不管是听歌、运动、甚至玩游戏&#xff0c;大多数人都会选择戴蓝牙耳机。那么&#xff0c;有哪些适合学生用的蓝牙耳机&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款300左右最好的蓝牙…

故障分析 | 从 Insert 并发死锁分析 Insert 加锁源码逻辑

作者&#xff1a;李锡超 一个爱笑的江苏苏宁银行 数据库工程师&#xff0c;主要负责数据库日常运维、自动化建设、DMP平台运维。擅长MySQL、Python、Oracle&#xff0c;爱好骑行、研究技术。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得…

Python初学小知识(十四):数据分析处理库Pandas

Python初学小知识&#xff08;十四&#xff09;&#xff1a;数据分析处理库Pandas 十八 Pandas1 文件读取1.1 读取csv1.2 读取txt1.3 读取excel&#xff08;xlsx&#xff09; 2 内容读取2.1 读取行2.2 读取列 3 数据处理3.1 加减乘除3.1.1 列 与 元素3.1.2 列 与 列 3.2 最值、…

React-Native 热更新实践

以下是基于CodePush的热更新方案的实践,有需要的可以参考一下: 一、配置appcenter 1.1 安装appcenter 安装appcenter的命令如下: npm install -g appcenter-cli /** 安装完成后 */ appcenter help /** 如果出现帮助指令说明安装成功 */安装成功之后,登录appcenter,涉…

Python——线性回归、梯度下降、正则化(原理)

目录 1 线性回归-最小二乘法(LSM) 2 梯度下降 3 数据归一化/标准化 4 过拟合和欠拟合 4.1 过拟合的处理 4.2 欠拟合的处理 5 正则化 一种通过属性的线性组合来进行预测的 线性模型 &#xff0c;其目的是找到一条直线或者一个平面或者更高维的超平面&#xff0c; 使得预…

FPGA学习笔记(三):PLL 锁相环

在 FPGA 芯片内部集成了 PLL(phase-locked loop&#xff0c;锁相环)&#xff0c;可以倍频分频&#xff0c;产生其它时钟类型。PLL 是 FPGA 中的重要资源&#xff0c;因为一个复杂的 FPGA 系统需要不同频率、相位的时钟信号&#xff0c;一个 FPGA 芯片中 PLL 的数量是衡量 FPGA …

CAN总线网络中为什么需要安装终端电阻?

摘要&#xff1a; 为什么CAN总线网络中为什么需要安装终端电阻&#xff1f; ​在详解CAN总线&#xff1a;高速CAN总线和低速CAN总线的特性​文章中&#xff0c;高速CAN网络和低速CAN网络都需要安装终端电阻。 详解CAN总线&#xff1a;高速CAN总线和低速CAN总线的特性 高速CA…

HTB_Netmon CVE-2018-9276 RCE漏洞复现

文章目录 信息收集解题创建用户exppowershell脚本 信息收集 扫描结果还是很丰富的 nmap -sC -sV -p- -T4 ip ftp服务直接允许匿名登录了&#xff0c;直接连接&#xff0c;翻目录&#xff0c;在 Users/Public/里就看到了 user flag&#xff0c;get命令保存到本地查看&#xff0…

Vue3父组件向子组件传值之ArticleItem组件的封装与使用

组件概念 官方文档:组件基础 本节核心内容:组件的封装与传值 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件模型,使我们…

易点易动固定资产管理平台如何帮助高校精准管理海量固定资产

高校拥有大量的固定资产,如教室、实验室、办公设备、体育设备等,这些资产数量庞大,分布广泛,管理难度大。传统的管理方式效率低下,难以实现精准和动态管理。易点易动固定资产管理平台利用现代信息技术,为高校提供一套智能化的资产管理解决方案,实现固定资产全流程的精准管理。 …

马云上三路和下三路

马云的上三路、下三路&#xff0c;马云最牛搭档总结 马云刚最牛搭档&#xff1a;蔡崇信&#xff0c;关明生 《关乎天下》是关明生写的一本书 趣讲大白话&#xff1a;没有方法走不远 【趣讲信息科技143期】 **************************** 马云上三路&#xff1a;使命&#xff0c…

为什么要选择付费SSL证书?免费和付费SSL证书的区别是什么?

近几年&#xff0c;由于互联网的发展与新冠疫情的影响&#xff0c;线上教育、线上办公、线上学习等逐渐融入我们的生活。但与此同时&#xff0c;信息数据泄露等网络安全问题也日益突出&#xff0c;为了保护企业与用户的隐私信息&#xff0c;越来越多的公司选择安装SSL证书来保护…

渲染02-内置Uniform

参考: CesiumJS 源码杂谈 - 从光到 Uniform 渲染02-内置Uniform 1 Unifrom 的接口 路径: pacaages/engin/Source/Renderer/AutomaticUniforms.js AutomaticUniforms 实际上是 Cesium 暴露给着色使用的接口集合。 AutomaticUniforms┖ AutomaticUniform(czm_projection/czm…

【Maven】Maven的打包方式和执行jar

Maven的打包方式和执行jar 1. Jar1.1 Pom.xml1.2 Run1.3 自动执行方法 2. Assembl1y2.1 Pom.xml2.2 Run2.3 要执行的方法 3. Awakening 1. Jar 1.1 Pom.xml <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-co…

2024年浙大MBA提面申请细则及条件详解

中文MBA项目申请 浙江大学MBA招生分提前批和常规批两类。其中&#xff0c;提前批是针对工作年限较长、管理经验较丰富的考生&#xff0c;需要在正式报名参加MBA全国联考前向浙江大学MBA教育中心提出申请并在通过审核后参加相应的面试&#xff08;具体申请和面试安排请登录浙江…

【英语】100个句子记完5500个考研单词

文章目录 Sentence 01Sentence 02Sentence 03Sentence 04Sentence 05Sentence 06Sentence 07Sentence 08Sentence 09Sentence 10Sentence 11Sentence 12Sentence 13Sentence 14Sentence 15Sentence 16Sentence 17Sentence 18Sentence 19Sentence 20Sentence 21Sentence 22Sente…

力扣sql中等篇练习(十一)

力扣sql中等篇练习(十一) 1 好友申请|| :谁有最多的好友 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 出现数字次数越多,就代表它的好友越多 # 对两列数据合并时 不取出合并数据,采用UNION ALL SELECT t1.id,count(*) num FROM (SELECT request…

低功耗设计方法学——篇Ⅰ

引言 低功耗设计关乎ASIC芯片的性能稳定。对ASIC 特别是一些Soc芯片的设计有着重要的影响&#xff0c;随着集成规模的大幅度增加&#xff0c;芯片自身的功耗问题暴露也越来越明显。低功耗设计的需求和必要性也越来越值得关注。本文就《Low Power Methodology Manual For Syste…