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正则表达式match和search用法实例
Mar 26 Python
Python3使用requests发闪存的方法
May 11 Python
深入理解Python3中的http.client模块
Mar 29 Python
Python实现简单的语音识别系统
Dec 13 Python
浅析python实现scrapy定时执行爬虫
Mar 04 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
安装docker-compose的两种最简方法
Jul 30 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
python中删除某个元素的方法解析
Nov 05 Python
Python类继承和多态原理解析
Feb 05 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
如何写php程序?
2006/12/08 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
php除数取整示例
2014/04/24 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
Python可变参数函数用法实例
2015/07/07 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
值传递还是引用传递
2015/02/08 面试题
校园报刊亭的创业计划书
2014/01/02 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
会计简历自我评价
2015/03/10 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
小学生读书笔记
2015/07/01 职场文书
社区安全温馨提示语
2015/07/14 职场文书
七年级英语教学反思
2016/02/15 职场文书
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
mysql幻读详解实例以及解决办法
2022/06/16 MySQL