python3+opencv 使用灰度直方图来判断图片的亮暗操作
作者:ZJE_ANDY 时间:2024-01-01 07:07:23
1.如何让计算机自动判断一张图是否偏暗?或是判断一张图是否是处于夜晚?我们可以先把图片转换为灰度图,然后根据灰度值的分布来判断,如:
我们可以从上图看到,晚上的图片的灰度值是集中在前段的,如0~30多左右,我们再看一张比较明亮的图片:
明亮的图片的灰度直方图是比较靠后的.
因此要判断图片的亮暗,只需要统计偏暗的像素个数,再除以图片像素的总个数,得到百分比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代码的文件名)
运行结果:
然后进入装黑暗图片的目录里,就会看到从空目录变成装有黑暗图片:
来源:https://blog.csdn.net/u014453898/article/details/80745987
标签:python3,opencv,灰度,直方图,亮暗
0
投稿
猜你喜欢
MySQL列类型的选择与MySQL的查询效率
2009-01-14 12:53:00
Security安装 Elastic SIEM 和 EDR的超详细教程
2022-03-08 19:55:43
python类的方法属性与方法属性的动态绑定代码详解
2023-07-02 03:31:26
Python for Informatics 第11章之正则表达式(四)
2023-06-15 04:48:39
django中ImageField的使用详解
2023-09-28 03:58:37
Element树形控件整合带图标的下拉菜单(tree+dropdown+input)
2023-07-02 16:45:35
整理Python最基本的操作字典的方法
2022-03-01 07:04:38
php中mysql连接方式PDO使用详解
2023-11-06 02:46:43
Python实现学生管理系统的完整代码(面向对象)
2023-09-11 19:08:55
从0到1构建vueSSR项目之路由的构建
2024-05-09 09:52:33
基于PHP实现用户注册登录功能
2024-04-30 08:48:35
浅谈django model postgres的json字段编码问题
2021-12-21 13:55:12
Unobtrusive的Web开发
2007-11-23 13:13:00
Python深度强化学习之DQN算法原理详解
2023-03-05 12:02:51
python 模拟登陆163邮箱
2021-08-03 09:30:11
给验证码增加干扰的杂点
2008-05-16 11:34:00
MySQL中索引优化distinct语句及distinct的多字段操作
2024-01-18 20:43:38
python实现简单的购物程序代码实例
2022-09-03 05:29:13
pygame游戏之旅 计算游戏中躲过的障碍数量
2022-02-13 19:09:16
python爬虫开发之PyQuery模块详细使用方法与实例全解
2021-05-28 20:54:29