0

我正在做一些搅拌机脚本 atm。我有一个与 numpy 和 opencv 一起使用的 python 脚本来进行一些图像处理,我想在搅拌机中使用该脚本。主要问题是,当我从搅拌机读取图像时,它带有 sRGB 中的像素值。OpenCV 对 sRGB 不好,因此我无法正确使用它。

我需要一种将这些 sRGB 像素转换为 255 比例的 RGB 或 HEX 的方法。我已经在网上彻底检查过,除了 sRGB 到线性 RGB 函数之外,找不到与此转换相关的太多内容,这只会使数字小得多。最初我认为搅拌器将像素存储在 [0,1) 范围内,只需乘以就可以转换为 [0,255],但我错了,因为这不起作用。

如果熟悉 sRGB 的人可以解释您如何从这些小值转换为 HEX 代码或 255 比例的 RGB 值,那就太好了。

谢谢!

原始图像: 原始 pix 一些代码示例:转换为具有 shape(w,h,3) 的 numpy 数组也乘以 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)

图像现在看起来像这样: 转换为 opencv 可读格式后

该函数旨在将 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()

生成的图像是全黑的。

4

0 回答 0