用平均色度和色度中心距进行偏色检查(opencv)

2024-11-24 08:39:10

1、from matplotlib import pyplot as pltimport cv2 as cvimport mathimport numpy as npimage = cv.imread('c:\\beach-dawn-dusk-2108373.jpg')b, g, r = cv.split(image)rows, cols, channel = image.shape加载图片 分离三原色并获得图片大小

用平均色度和色度中心距进行偏色检查(opencv)

2、imgLab = cv.cvtColor(image, cv.COLOR_BGR2LAB)Lab, a, b = cv.split(imgLab)print(Lab, a, b)转化到COLOR_BGR2LAB空间,方便检查偏色L表示整张图的亮度a表示从洋红色至深绿b表示从焦黄色至袅蓝色a,b通道没有亮度

用平均色度和色度中心距进行偏色检查(opencv)

3、根据a,b计算平均色度DDa =0Db = 0for i in range(rows): for j in range(cols): Da= Da+ a[i][j] Db= Db+ b[i][j]Da, Db= (Da/ (rows * cols)) - 128, (Da/ (rows * cols)) - 128D = np.sqrt((np.square(Da) + np.square(Db)))

用平均色度和色度中心距进行偏色检查(opencv)

4、根据a,b计算色度中心距MMa =0Mb = 0for i in range(rows): for j in range(cols): Ma= np.abs(a[i][j] - Da- 128) + Ma Mb= np.abs(b[i][j] - Db - 128) + MbMa, Mb = Ma/ (cols * cols), Mb/ (cols * cols)M = np.sqrt((np.square(Ma) + np.square(Mb)))

用平均色度和色度中心距进行偏色检查(opencv)

5、计算平均色度和中心距比值 作为检验标准 越小表示偏色越小经验参考值1.2-1.5k = D / Mprint('D/M: %f' %k)cv.imshow('image', image)cv.imshow('imgLab', imgLab)print(D)print(M)

6、输出LAB直方图plt.hist(Lab.ravel(), 256, [0, 256])plt.show()plt.hist(a.ravel(), 256, [0, 256])plt.show()plt.hist(b.ravel(), 256, [0, 256])plt.show()

用平均色度和色度中心距进行偏色检查(opencv)用平均色度和色度中心距进行偏色检查(opencv)用平均色度和色度中心距进行偏色检查(opencv)

7、输出RGB直方图b_hist = cv.calcHist([b], [0], None, [256], [0, 256])g_hist = cv.calcHist([g], [0], None, [256], [0, 256])r_hist = cv.calcHist([r], [0], None, [256], [0, 256])plt.plot(b_hist, label='B', color='blue')plt.plot(g_hist, label='G', color='green')plt.plot(r_hist, label='R', color='red')plt.legend(loc='best')plt.xlim([0, 256])plt.show()

用平均色度和色度中心距进行偏色检查(opencv)

8、调整LAB色度空间a b然后输出显示。imgLab[:,:,1] = 127imgBGR = cv.cvtColor(imgLab,cv.COLOR_LAB2BGR)cv.imshow('imgBGR', imgBGR)imgLab[:,:,2] = 255imgBGR = cv.cvtColor(imgLab,cv.COLOR_LAB2BGR)cv.imshow('imgBGR', imgBGR)print(imgLab)cv.waitKey(0)cv.destroyAllWindows()

用平均色度和色度中心距进行偏色检查(opencv)
猜你喜欢