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

2026-03-09 01:49:53

1、from matplotlib import pyplot as plt

import cv2 as cv

import math

import numpy as np

image = 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计算平均色度D

Da =0

Db = 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计算色度中心距M

Ma =0

Mb = 0

for 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) + Mb 

Ma , Mb  = Ma/ (cols * cols), Mb / (cols * cols)M = np.sqrt((np.square(Ma) + np.square(Mb )))

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

5、计算平均色度和中心距比值 作为检验标准 越小表示偏色越小经验参考值1.2-1.5

k = 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)

猜你喜欢