多语言展示
当前在线:1230今日阅读:75今日分享:44

python环境使用平均值判断图片亮暗

图片亮暗常用于图片检测,常用的有颜色空间转换YUV和经验公式方法,本文采用平均值法进行检测。
工具/原料
1

python, opencv, numpy

2

pycharm windows7

方法/步骤
1

平均值法可分为以下几个步骤:1)导入图片2)灰度转换3)直方图显示(方便分析,非必须)4)统计[0-50] [50-100] [100-150] [150-200] [200-250] 频次5)投票检测6)得出结果并打印

2

import numpy as npimport cv2 as cvimport mathfrom matplotlib import pyplot as plt1)导入图片image = cv.imread('c:\\beijingliang.jpg')cv.imshow('image', image)

3

2)灰度转换gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow('gray', gray)

4

3)直方图显示(方便分析,非必须)plt.hist(gray.ravel(),256,[0,256])plt.show()

5

4)统计[0-50] [50-100] [100-150] [150-200] [200-250] 频次#遍历灰度图的所有像素num0_49 = 0num50_99 = 0num100_149 = 0num150_199 = 0num200_255 = 0numlist=[]print(gray)for row in gray:    for col in row:        if col < 40:   #人为设置的超参数,表示0~39的灰度值为暗            dark_sum += 1        if (col < 50):  #col in range[0, 50]:            num0_49 += 1        if (50 <= col  and col < 100):  #col in range[50, 100]:            num50_99 += 1        if (100 <= col  and col < 150):  #col in range[100, 150]:            num100_149 += 1        if (150 <= col  and col < 200):  #col in range[150, 200]:            num150_199 += 1        if (200 <= col  and col < 255):  #col in range[200, 250]:            num200_255 += 1print(dark_sum)print(num0_49)print(num50_99)print(num100_149)print(num150_199)print(num200_255)

6

5)频次转换为numpy类型numlist.append(num0_49)numlist.append(num50_99)numlist.append(num100_149)numlist.append(num150_199)numlist.append(num200_255)print(numlist)nplist = np.array(numlist)meanNum = nplist.mean()print(meanNum)

7

6)投票 权重列表为[-2 -1 0 1 2]# vote =0votenp = np.zeros(5)if(nplist[0] > meanNum):    votenp[0] = -2if(nplist[1] > meanNum):    votenp[1] = -1if(nplist[2] > meanNum):    votenp[2] = 0if(nplist[3] > meanNum):    votenp[3] = 1if(nplist[4] > meanNum):    votenp[4] = 2print(votenp)

8

7)根据权重求和,判断结果并输出小于-1 黑;  -1, 1 之间亮  大于1 高亮if(votenp.sum() < -1):    print('dark')elif (votenp.sum() < 1):    print('middle')else:    print('bright')cv.waitKey(0)cv.destroyAllWindows()得出结果: 黑

9

再换一幅图image = cv.imread('c:\\meiping1.png')。。。得出结果:亮

注意事项
1

投票 权重列表为[-2 -1 0 1 2]

2

[0-50] [50-100] [100-150] [150-200] [200-250] 频次

推荐信息