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基础教程之字典操作详解
Mar 25 Python
在Python的框架中为MySQL实现restful接口的教程
Apr 08 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
python样条插值的实现代码
Dec 17 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
python输入多行字符串的方法总结
Jul 02 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
python——全排列数的生成方式
Feb 26 Python
python爬取音频下载的示例代码
Oct 19 Python
python中entry用法讲解
Dec 04 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
安装APACHE
2007/01/15 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
python实现共轭梯度法
2019/07/03 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
老师的检讨书
2014/02/23 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
用python画城市轮播地图
2021/05/28 Python
SQL Server中锁的用法
2022/05/20 SQL Server