将 3D 数组转换为 RGB 值数组 [关闭]

Posted

技术标签:

【中文标题】将 3D 数组转换为 RGB 值数组 [关闭]【英文标题】:Convert a 3D array to RGB valued array [closed] 【发布时间】:2019-01-15 04:56:27 【问题描述】:

我有一个像

这样的 3D 数组
[[[110403 676632 105064]
  [149110 204334 829800]
  [  1806    754   9555]]

 [[704375  27060 189080]
  [168544  93786 254782]
  [ 37446  23754 206955]]

 [[466900  34404 163800]
  [125518  84350 234913]
  [148988 841662 535410]]]

我希望将整个数组转换为与 0-255 相关的值而不是将值直接裁剪为 255。例如,如果我有一个数字 7014,我希望它在 0-255 之间。

我尝试了这么多变种,但没有一个奏效。喜欢

cv.cvtColor(result, cv.COLOR_BGR2GRAY)

&

np.dot(result, [0.299, 0.587, 0.114]) 

我怎样才能做到这一点? 提前致谢!

【问题讨论】:

“我希望它在 0-255 之间的范围内”不够具体。将所有内容分配给 3 符合您的要求。 如果值 x 超过 255。我希望将其转换为 (0 - 255) 范围内的数字 3 在 (0 - 255) 范围内。所以分配给 3. 这里的逻辑是什么? 【参考方案1】:

不清楚您要问什么,但这里有一些选项可以帮助您入门:

手动最小-最大变换

您可以进行最小-最大转换,使它们都在[0,1] 的范围内,然后乘以 255。然后,所有值都在 0 到 255 的范围内,与原始数组成正比(你的最小值将是0,你的最大值将是255)。

(arr-np.min(arr))/(np.max(arr)-np.min(arr))*255

这会给你:

array([[[ 33.25036151, 204.95570265,  31.63134374],
        [ 44.98801296,  61.73433955, 251.40292398],
        [  0.31901231,   0.        ,   2.66884725]],

       [[213.36859086,   7.97712711,  57.10866111],
        [ 50.88124979,  28.211362  ,  77.03237453],
        [ 11.12661552,   6.97460364,  62.52914112]],

       [[141.35580825,  10.20414837,  49.44266198],
        [ 37.83388908,  25.34995505,  71.00722671],
        [ 44.95101723, 255.        , 162.13102979]]])

cv2 选项:

当您标记此opencv 时,您也可以使用他们的normalize function:

import cv2

cv2.normalize(arr,0,255)

还给你一个 0 到 255 之间的数组:

array([[[ 16,  96,  15],
        [ 21,  29, 117],
        [  0,   0,   1]],

       [[100,   4,  27],
        [ 24,  13,  36],
        [  5,   3,  29]],

       [[ 66,   5,  23],
        [ 18,  12,  33],
        [ 21, 119,  76]]], dtype=int32)

注意:您也可以使用cv2 进行最小-最大转换,正如我在上面手动显示的那样:

cv2.normalize(arr,0,255, norm_type=cv2.NORM_MINMAX, dtype=5)

array([[[ 33.250362 , 204.9557   ,  31.631344 ],
        [ 44.988014 ,  61.73434  , 251.40292  ],
        [  0.3190123,   0.       ,   2.6688473]],

       [[213.36859  ,   7.977127 ,  57.10866  ],
        [ 50.88125  ,  28.211363 ,  77.03237  ],
        [ 11.126616 ,   6.9746037,  62.52914  ]],

       [[141.3558   ,  10.204148 ,  49.44266  ],
        [ 37.83389  ,  25.349955 ,  71.007225 ],
        [ 44.951015 , 255.       , 162.13103  ]]], dtype=float32)

【讨论】:

cv2.normalize 完成了这项工作。我需要的是我不想将大于 255 的值 x 直接转换为 255 或其他值。我想要一个函数将值标准化到给定范围。我可能解释得不好,抱歉。 很高兴它有帮助!将来,当您提出问题时,尽可能具体会有所帮助,如果可能的话,提供某种所需的输出。如果您的问题得到解决,请考虑接受这个答案:) 是的,我确实将其标记为答案。我认为我的代表低于 16,所以它没有标记为答案。对不起 哦,我不知道这个。非常感谢

以上是关于将 3D 数组转换为 RGB 值数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将numpy数组转换为rgb图像

将 rgb 数字数组转换为十六进制颜色字符串

将 3 维字节数组转换为单字节数组 [关闭]

将 RGB 颜色数组转换为 px.imshow 热图

将带有对象的数组转换为数组[关闭]

将数组十六进制颜色转换为数组 rgb 颜色 [重复]