python3+opencv 利用灰度直方图来判断图片的亮暗情况

编程入门 行业动态 更新时间:2024-10-06 22:23:08

python3+opencv 利用灰度<a href=https://www.elefans.com/category/jswz/34/1739935.html style=直方图来判断图片的亮暗情况"/>

python3+opencv 利用灰度直方图来判断图片的亮暗情况

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;	#偏暗像素所占比例初始化为0piexs_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 利用灰度直方图来判断图片的亮暗情况

本文发布于:2024-02-14 10:29:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763343.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:直方图   灰度   情况   图片   opencv

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!