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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
Python中无限元素列表的实现方法
Aug 18 Python
Python实现单词翻译功能
Jun 06 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Anaconda入门使用总结
Apr 05 Python
使用python编写监听端
Apr 12 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
django 扩展user用户字段inlines方式
Mar 30 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
通过Python扫描代码关键字并进行预警的实现方法
May 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对现有搜索引擎的调用
2013/06/25 PHP
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
vue-router传参用法详解
2019/01/19 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
详解vue 组件
2020/06/11 Javascript
浅谈Python中copy()方法的使用
2015/05/21 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
pytorch进行上采样的种类实例
2020/02/18 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
创立科技Java面试题
2015/11/29 面试题
课程设计心得体会
2013/12/28 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
2015年采购员工作总结
2015/04/27 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL