将 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 值数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章