python, opencv, numpy
pycharm windows7
平均值法可分为以下几个步骤:1)导入图片2)灰度转换3)直方图显示(方便分析,非必须)4)统计[0-50] [50-100] [100-150] [150-200] [200-250] 频次5)投票检测6)得出结果并打印
import numpy as npimport cv2 as cvimport mathfrom matplotlib import pyplot as plt1)导入图片image = cv.imread('c:\\beijingliang.jpg')cv.imshow('image', image)
2)灰度转换gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow('gray', gray)
3)直方图显示(方便分析,非必须)plt.hist(gray.ravel(),256,[0,256])plt.show()
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)
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)
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)
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()得出结果: 黑
再换一幅图image = cv.imread('c:\\meiping1.png')。。。得出结果:亮
投票 权重列表为[-2 -1 0 1 2]
[0-50] [50-100] [100-150] [150-200] [200-250] 频次