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 15 Python
python多线程编程中的join函数使用心得
Sep 02 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
浅析Python3爬虫登录模拟
Feb 07 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
Python3.8官网文档之类的基础语法阅读
Sep 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
php getsiteurl()函数
2009/09/05 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
重定向实现代码
2006/11/20 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
OpenCV 模板匹配
2019/07/10 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
P/Invoke是什么
2015/07/31 面试题
酒店销售主管岗位职责
2014/01/04 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
考研经验交流会策划书
2015/11/02 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android