我正在做一些blender脚本atm。我有一个python脚本,使用numpy和opencv进行一些图像处理,我想在blender中使用该脚本。主要问题是,当我从blender读取图像时,它带有sRGB中的像素值。 OpenCV对sRGB不好,因此无法正常使用它。
我需要一种方法将这些sRGB像素转换为255比例的RGB或HEX。我已经在网上彻底检查过,除了sRGB到线性RGB功能之外,还没有找到与此转换有多大关系,只能使数字更小。最初我认为搅拌机将像素存储在[0,1)范围内,可以通过乘法转换为[0,255],但是我认为错误,因为它不起作用。
如果熟悉sRGB的人可以解释如何从这些小值到HEX代码或255级RGB值,那会很好。
谢谢!
原始图片: original pix 一些代码示例: 转换为numpy数组,其形状(w,h,3)也乘以255
img = bpy.data.images.load(finalpath,True)
pixelsImg = np.array(img.pixels)
pixelsImg.shape = (img.size[0],img.size[1],4)
pixelsImg = np.delete(np.dot(pixelsImg,255),3,2)
cv2.imshow('pix2',pixelsImg)
图片现在看起来像这样: after converting to opencv readable format
该函数用于将sRGB转换为线性RGB:
def s2lin(x):
a = 0.055
if x <=0.04045 :
y = x * (1.0 / 12.92)
else:
y = pow( (x + a) * (1.0 / (1 + a)), 2.4)
return y
应用函数后:
pixelsImg = np.array(img.pixels)
pixelsImg.shape = (img.size[0],img.size[1],4)
result =np.vectorize(s2lin)
resultList = result(pixelsImg)
cv2.imshow('p',resultList)
cv2.waitKey()
cv2.destroyAllWindows()
生成的图像为全黑。