python3+opencv 使用灰度直方图来判断图片的亮暗操作


Posted in Python onJune 02, 2020

1.如何让计算机自动判断一张图是否偏暗?或是判断一张图是否是处于夜晚?我们可以先把图片转换为灰度图,然后根据灰度值的分布来判断,如:

python3+opencv 使用灰度直方图来判断图片的亮暗操作

python3+opencv 使用灰度直方图来判断图片的亮暗操作

我们可以从上图看到,晚上的图片的灰度值是集中在前段的,如0~30多左右,我们再看一张比较明亮的图片:

python3+opencv 使用灰度直方图来判断图片的亮暗操作

明亮的图片的灰度直方图是比较靠后的.

因此要判断图片的亮暗,只需要统计偏暗的像素个数,再除以图片像素的总个数,得到百分比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代码的文件名)

运行结果:

python3+opencv 使用灰度直方图来判断图片的亮暗操作

然后进入装黑暗图片的目录里,就会看到从空目录变成装有黑暗图片:

python3+opencv 使用灰度直方图来判断图片的亮暗操作

以上这篇python3+opencv 使用灰度直方图来判断图片的亮暗操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
微信跳一跳python代码实现
Jan 05 Python
自学python的建议和周期预算
Jan 30 Python
python实现简单图片物体标注工具
Mar 18 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
python Shapely使用指南详解
Feb 18 Python
基于python实现生成指定大小txt文档
Jul 20 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 Python
python的html标准库
Apr 29 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 Python
Java多线程实现四种方式原理详解
Jun 02 #Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 #Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 #Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 #Python
Python几种常见算法汇总
Jun 02 #Python
opencv-python的RGB与BGR互转方式
Jun 02 #Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 #Python
You might like
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
Python中音频处理库pydub的使用教程
2017/06/07 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
对python Tkinter Text的用法详解
2018/10/11 Python
python实现Flappy Bird源码
2018/12/24 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
司机岗位职责
2013/11/15 职场文书
小区门卫岗位职责
2013/12/31 职场文书
安全资金保障制度
2014/01/23 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
小学语文教师研修日志
2015/11/13 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
Python竟然能剪辑视频
2021/05/25 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL