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的Tornado框架对子域名和泛域名的支持
May 02 Python
在Python中操作列表之List.append()方法的使用
May 20 Python
Python 功能和特点(新手必学)
Dec 30 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
python实现堆和索引堆的代码示例
Mar 19 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
python 链接sqlserver 写接口实例
Mar 11 Python
Django Form设置文本框为readonly操作
Jul 03 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 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与XML联手进行网站编程代码实例
2008/07/10 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
机关职员工作检讨书
2014/10/23 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
中标通知书
2015/04/17 职场文书
2015年女职工工作总结
2015/05/15 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
HTML中的表格元素介绍
2022/02/28 HTML / CSS
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS