Применить функцию к замаскированной области - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть такое изображение:

Image with mask applied

У меня есть и маска, и исходное изображение.Я хотел бы рассчитать цветовую температуру ТОЛЬКО региона уток.

Прямо сейчас я перебираю каждую строку и столбец изображения ниже и получаю пиксели, значения которых не равны нулю.Но я думаю, что это не правильный способ сделать это.Любые предложения?

То, что я сделал, было:

xyzImg = cv2.cvtColor(resImage, cv2.COLOR_BGR2XYZ)
x,y,z = cv2.split(xyzImg)
xList=[]
yList=[]
zList=[]

rows=x.shape[0]
cols=x.shape[1]

for i in range(rows):
    for j in range(cols):
        if (x[i][j]!=0) and (y[i][j]!=0) and (z[i][j]!=0):
            xList.append(x[i][j])
            yList.append(y[i][j])
            zList.append(z[i][j])

xAvg = np.mean(xList)
yAvg = np.mean(yList)
zAvg = np.mean(zList)

xs = xAvg / (xAvg + yAvg + zAvg)
ys = yAvg / (xAvg + yAvg + zAvg)

xyChrome = np.array([xs,ys])

Но это очень медленно, и я не думаю, что это правильно ...

1 Ответ

0 голосов
/ 21 сентября 2018

Самый простой способ - использовать функцию cv2.mean().

Она принимает два аргумента src (от 1 до 4 каналов) и mask и возвращает вектор со средними значениями для отдельных каналов.

См. cv2 :: mask

...