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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
python简单获取数组元素个数的方法
Jul 13 Python
python中实现控制小数点位数的方法
Jan 24 Python
安装docker-compose的两种最简方法
Jul 30 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
python selenium操作cookie的实现
Mar 18 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
Python-jenkins 获取job构建信息方式
May 12 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
通过实例解析python and和or使用方法
Nov 14 Python
python中round函数保留两位小数的方法
Dec 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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
微信小程序动态显示项目倒计时
2019/06/20 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
Python常用算法学习基础教程
2017/04/13 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python循环结构的应用场景详解
2019/07/11 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
JDO的含义
2012/11/17 面试题
竞争上岗演讲稿
2014/01/05 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
教师党员整改措施
2014/10/24 职场文书
奖学金个人总结
2015/03/04 职场文书
2015年幼师工作总结
2015/04/28 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python