下面是我为了标准化图像并使其照度不变而编写的 python 代码。对于图像的每个像素,新像素值应为(R/sum,G/sum,B/sum),其中sum=R+G+B。
import numpy as np
import cv2
img=cv2.imread(r'C:/Users/kjbaili/.spyder-py3/color_supression_RV/rub00.jpg')
print(img[200,200])
print(img[200,200,0])
def normalized(down):
norm_img = np.zeros(down.shape, down.dtype)
width,height,channels=down.shape
for y in range(0,height):
for x in range(0,width):
sum=down[x,y,0]+down[x,y,1]+down[x,y,2]
b=(down[x,y,0]/ sum)*255
g=(down[x,y,1]/ sum)*255
r=(down[x,y,2]/ sum)*255
norm_img[x,y,0]= b
norm_img[x,y,1]= g
norm_img[x,y,2]= r
return norm_img
image=normalized(img)
cv2.imshow('normalized',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
但是,我收到以下错误:
OverflowError: cannot convert float infinity to integer
虽然,我在这里找到了与此相关的类似已回答问题,但我无法将其投射到我的问题中,因为我不知道哪个值会导致无穷大。
12345678_0001
相关分类