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日期操作学习笔记
Oct 07 Python
python使用reportlab画图示例(含中文汉字)
Dec 03 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
详解Django中间件执行顺序
Jul 16 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python使用suds调用webservice接口的方法
Jan 03 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
python抖音表白程序源代码
Apr 07 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
python将字符串转变成dict格式的实现
Nov 18 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
python解释器安装教程的方法步骤
Jul 02 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跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP实现计算器小功能
2020/08/28 PHP
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
Python编写百度贴吧的简单爬虫
2015/04/02 Python
Python每天必学之bytes字节
2016/01/28 Python
python读取oracle函数返回值
2016/07/18 Python
Python socket实现简单聊天室
2018/04/01 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python实现串口自动触发工作的示例
2019/07/02 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
python调用百度API实现人脸识别
2020/11/17 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
国际书籍零售商:Wordery
2017/11/01 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
机关工会工作总结2015
2015/05/26 职场文书
师范生见习自我总结
2015/06/23 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers