python3+opencv 使用灰度直方图来判断图片的亮暗操作
作者:ZJE_ANDY 发布时间:2024-01-01 07:07:23
标签:python3,opencv,灰度,直方图,亮暗
1.如何让计算机自动判断一张图是否偏暗?或是判断一张图是否是处于夜晚?我们可以先把图片转换为灰度图,然后根据灰度值的分布来判断,如:
我们可以从上图看到,晚上的图片的灰度值是集中在前段的,如0~30多左右,我们再看一张比较明亮的图片:
明亮的图片的灰度直方图是比较靠后的.
因此要判断图片的亮暗,只需要统计偏暗的像素个数,再除以图片像素的总个数,得到百分比p即可,至于p大于多少即判断为暗,则可以由你自己设置.下面给出代码,此代码可以在装满图片的目录里选出偏暗的图片,然后把这些图片保存下来.
2.代码:
import cv2;
import numpy as np;
import matplotlib.pyplot as plt;
import os;
import sys;
def func(img,pic_path,pic):
#把图片转换为灰度图
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY);
#获取灰度图矩阵的行数和列数
r,c = gray_img.shape[:2];
dark_sum=0;#偏暗的像素 初始化为0个
dark_prop=0;#偏暗像素所占比例初始化为0
piexs_sum=r*c;#整个弧度图的像素个数为r*c
#遍历灰度图的所有像素
for row in gray_img:
for colum in row:
if colum<40:#人为设置的超参数,表示0~39的灰度值为暗
dark_sum+=1;
dark_prop=dark_sum/(piexs_sum);
print("dark_sum:"+str(dark_sum));
print("piexs_sum:"+str(piexs_sum));
print("dark_prop=dark_sum/piexs_sum:"+str(dark_prop));
if dark_prop >=0.75:#人为设置的超参数:表示若偏暗像素所占比例超过0.78,则这张图被认为整体环境黑暗的图片
print(pic_path+" is dark!");
cv2.imwrite("../DarkPicDir/"+pic,img);#把被认为黑暗的图片保存
else:
print(pic_path+" is bright!")
#hist(pic_path); #若要查看图片的灰度值分布情况,可以这个注释解除
#用于显示图片的灰度直方图
def hist(pic_path):
img=cv2.imread(pic_path,0);
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.subplot(121)
plt.imshow(img,'gray')
plt.xticks([])
plt.yticks([])
plt.title("Original")
plt.subplot(122)
plt.hist(img.ravel(),256,[0,256])
plt.show()
#读取给定目录的所有图片
def readAllPictures(pics_path):
if not os.path.exists(pics_path):
print("路径错误,路径不存在!")
return;
allPics = [];
pics = os.listdir(pics_path);
for pic in pics:
pic_path = os.path.join(pics_path,pic);
if os.path.isfile(pic_path):
allPics.append(pic_path);
img=cv2.imread(pic_path);
func(img,pic_path,pic);
return allPics;
#创建用于存放黑暗图片的目录
def createDarkDir():
DarkDirPath = "../DarkPicDir";
isExists = os.path.exists(DarkDirPath);
if not isExists:
os.makedirs(DarkDirPath);
print("dark pics dir is created successfully!");
return True;
else:
return False;
if __name__ =='__main__':
pics_path = sys.argv[1];#获取所给图片目录
createDarkDir();
allPics=readAllPictures(pics_path);
运行命令: python3 cal.py 图片集的路径名
(其中cal.py 是python代码的文件名)
运行结果:
然后进入装黑暗图片的目录里,就会看到从空目录变成装有黑暗图片:
来源:https://blog.csdn.net/u014453898/article/details/80745987
0
投稿
猜你喜欢
- 具体用法如下: 代码如下:-- ============================================= -- Autho
- (asp.net的应用). 在网上一搜有很多此类文章,但我需要将公司的复杂的,较大的web应用也以此方式操作,比较的头大。一般的文章建议将b
- 现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽
- 在SQL Server Management Studio 用WINDOWS连接的情况下改实列的“属性&rdqu
- <%dim total(7,1) total(1,0)="中国经营报"
- 先用最简单的三层全连接神经网络,然后添加激活层查看实验结果,最后加上批标准化验证是否有效首先根据已有的模板定义网络结构SimpleNet,命
- ob缓存介绍ob是output buffering的简称,输出缓冲区,缓冲区是通过php.ini中的output_buffering变量控制
- Python的装饰器(decorator)是一个很棒的机制,也是熟练运用Python的必杀技之一。装饰器,顾名思义,就是用来装饰的,它装饰的
- 出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要。arcpy.mapping就是ArcGIS里的出图模块,能快速
- 首先请把手放胸前成沉思状:我上了生活,还是被生活上了自己?没想出答案把,恩,可以读下文了。从语义角度讲,同一事物的不同表述可以反映人的主观视
- 由于下载这个clsExport2Excel 代码时,已经找不到代码出处感谢上传这个类的朋友,为大家带来了方便我只对其中的属性传递做了一些调整
- django接口可以通过localhost或者127.0.0.1进行访问,但无法通过本机ip地址访问1. 修改django项目中的setti
- 在研究ezSQL的时候就看到了mssql_connect()等一些php提供的连接MSSQL的函数,本以为php这个开源的风靡世界的编程语言
- 今天一同事需要整理http://ics.cnvd.org.cn/工控漏洞库里面的信息,一看960多个要整理到什么时候才结束。所以我决定写个爬
- 今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩
- 第一部分:UI界面设计界面效果图如下:ui文件(可拉动控件自行创建一个button和text)<?xml version="
- 用下列代码即可:<%On error resume nextSet session=Creat
- 问题:python+Flask 反复调用model报错ValueError: Tensor Tensor("dense_2/Sof
- 本文主要介绍了pytorch cnn 识别手写的字实现自建图片数据,分享给大家,具体如下:# library# standard libra
- 本文主要研究的是selenium python浏览器多窗口处理的相关内容,分享了操作实例代码,具体如下:#!/usr/bin/python#