Проблема вычисления в opencv, Python

#numpy #opencv

#тупой #opencv

Вопрос:

Я вычислял Y из YCbCr для выравнивания гистограммы.

Значение кб, которое я хочу, равно «кб / (b g r)» => отношение b к RGB в пикселе.

Я думал, что это был обычный расчет, но в этой части продолжают возникать ошибки.

Она заключается в следующем.

 RuntimeWarning: overflow encountered in ubyte_scalars
kb[y][x] = b[y][x] / (b[y][x]   g[y][x]   r[y][x])
 

Что мне следует сделать, чтобы решить эту проблему?

 import numpy as np
import cv2

def transform(img) :
    height, width, color = img.shape
    result = np.zeros((height, width), np.uint8)

    b,g,r = cv2.split(img)

    kb = [[0.0] * width] * height
    kg = [[0.0] * width] * height
    kr = [[0.0] * width] * height
    yi = [[0.0] * width] * height
    yo = [[0.0] * width] * height

    list(b), list(g), list(r), list(kb), list(kg), list(kr), list(yi), list(yo)

    for x in range(width):
        for y in range(height):
            kb[y][x] = b[y][x] / (b[y][x]   g[y][x]   r[y][x])
            kg[y][x] = g[y][x] / (b[y][x]   g[y][x]   r[y][x])
            kr[y][x] = b[y][x] / (b[y][x]   g[y][x]   r[y][x])

    # ...
    return result

 

Комментарии:

1. Пиксели сохраняются в unit8 типе, добавление некоторых из них приводит к переполнению. Что делать, если вы конвертируете dtype изображение, например: img = img.astype(dtype='int64') ?

2. Сделав это, вы решили проблему!!!! Спасибо, что просто решили проблему, которая казалась мне сложной.