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实现建立SSH连接的方法
Jun 03 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
python实现画圆功能
Jan 25 Python
解决pycharm界面不能显示中文的问题
May 23 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
Django中create和save方法的不同
Aug 13 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
python字典key不能是可以是啥类型
Aug 04 Python
Python实现像awk一样分割字符串
Sep 15 Python
golang中的空接口使用详解
Mar 30 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同时连接多个mysql数据库示例代码
2014/03/17 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python中的urllib模块使用详解
2015/07/07 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
工程开工庆典邀请函
2014/02/01 职场文书
迟到检讨书500字
2014/02/05 职场文书
公司建议书怎么写
2014/05/15 职场文书
护士节策划方案
2014/05/19 职场文书
民间借贷协议书范本
2014/10/01 职场文书
大学生个人学年总结
2015/02/15 职场文书
慈善募捐倡议书
2015/04/27 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python