#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. Сделав это, вы решили проблему!!!! Спасибо, что просто решили проблему, которая казалась мне сложной.