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 cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
详解Python基础random模块随机数的生成
Mar 23 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
python同步windows和linux文件
Aug 29 Python
python tkinter canvas使用实例
Nov 04 Python
Python如何读写二进制数组数据
Aug 01 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
python re.match()用法相关示例
Jan 27 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 Python
python 指定源路径来解决import问题的操作
Mar 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中autoload的用法总结
2013/11/08 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
python实现词法分析器
2019/01/31 Python
python反转列表的三种方式解析
2019/11/08 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
python爬虫---requests库的用法详解
2020/09/28 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
类的核心特性有哪些
2014/01/01 面试题
环保建议书
2014/03/12 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
革命电影观后感
2015/06/18 职场文书