对比度:通俗地讲就是亮暗的拉伸对比程度,通常表现了图像画质的清晰程度。对比度的计算公式如下:
每个小括号的数据是怎么来的?按四近邻计算,比如第一个小括号:以第一行第一列为中心,上下左右分别与这个中心值相减再平方,然后加在一起,即:(2-1)2+(3-1)2;第二个小括号即:(1-3)2+(9-3)2+(1-3)2
最后的48是怎么来的:其实就是总的平方次个数
'''上面案例和下面代码都是使用四近邻方式计算''' from cv2 import cv2 import numpy as np def contrast(img0): img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY) #彩色转为灰度图片 m, n = img1.shape #图片矩阵向外扩展一个像素 img1_ext = cv2.copyMakeBorder(img1,1,1,1,1,cv2.BORDER_REPLICATE) / 1.0 # 除以1.0的目的是uint8转为float型,便于后续计算 rows_ext,cols_ext = img1_ext.shape b = 0.0 for i in range(1,rows_ext-1): for j in range(1,cols_ext-1): b += ((img1_ext[i,j]-img1_ext[i,j+1])**2 + (img1_ext[i,j]-img1_ext[i,j-1])**2 + (img1_ext[i,j]-img1_ext[i+1,j])**2 + (img1_ext[i,j]-img1_ext[i-1,j])**2) cg = b/(4*(m-2)*(n-2)+3*(2*(m-2)+2*(n-2))+2*4) #对应上面48的计算公式 print(cg) img0 = cv2.imread('1301022016GF2DOM_2535_5118_0_copy1.jpg') contrast(img0) img1 = cv2.imread('1301022016GF2DOM_2535_5118_0_copy2.jpg') contrast(img1) img2 = cv2.imread('1301022016GF2DOM_2535_5118_0_copy3.jpg') contrast(img2) img3 = cv2.imread('1301022016GF2DOM_2535_5118_0_copy4.jpg') contrast(img3)
结果如下(供参考):
13.12
15.19
16.24
18.21
结论:图片越清晰,对比度越大
使用如下图片(因为下面图片大小被压缩,所以计算结果可能不一致,但大小顺序一致)
联系客服