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程序与服务器连接的WSGI接口
Apr 29 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
K-近邻算法的python实现代码分享
Dec 09 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Python的pygame安装教程详解
Feb 10 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python批量创建变量并赋值操作
Jun 03 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
js实现点赞效果
2020/03/16 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
Python中Random和Math模块学习笔记
2015/05/18 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
自我鉴定模板
2013/10/29 职场文书
毕业生文员求职信
2013/11/03 职场文书
党员志愿者活动方案
2014/08/28 职场文书
2015年新农合工作总结
2015/03/30 职场文书
甲午大海战观后感
2015/06/02 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis