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判断、获取一张图片主色调的2个实例
Apr 10 Python
Python常见数据结构详解
Jul 24 Python
Python 冒泡,选择,插入排序使用实例
Feb 05 Python
Python工程师面试题 与Python Web相关
Jan 14 Python
Python脚本实现自动发带图的微博
Apr 27 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
一个Python最简单的接口自动化框架
Jan 02 Python
python文件选择对话框的操作方法
Jun 27 Python
python函数的万能参数传参详解
Jul 26 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python线程信号量semaphore使用解析
Nov 30 Python
Opencv实现二维直方图的计算及绘制
Jul 21 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+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python中的多重继承实例讲解
2014/09/28 Python
python实现的jpg格式图片修复代码
2015/04/21 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
python 性能提升的几种方法
2016/07/15 Python
python3设计模式之简单工厂模式
2017/10/17 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
音乐器材管理制度
2014/01/31 职场文书
服装创业计划书范文
2014/02/05 职场文书
文明城市标语
2014/06/16 职场文书
社保转移委托书范本
2014/10/08 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书