opencv - OpenCV:设置每个 RGB 像素的亮度,使最亮的通道(R、G 或 B)处于最大值
问题描述
对于 RGB 图像中的每个像素,我想增加其亮度,以使该像素(R、G 或 B)的最强通道最大化。例如,如果一个像素的 RGB 值为 (128, 64, 32),最大通道值为 255,则该像素应更改为大约 (255, 128, 64)。这是一种穷人的阴影去除系统。
我可以通过显式迭代像素来做到这一点,但这非常低效。使用严格的 OpenCV 方法最有效的方法是什么?似乎它可能会使用 YUV 空间?
(顺便说一句,我在 EmguCV 中使用 C#,但是直接的 Python/OpenCV 答案会很好。编辑:但我不能使用 Python 库)
解决方案
在 Python 中,OpenCV 图像只是 numpy 数组。所以这是一个 python/numpy 方法:
# toy sample
np.random.seed(1)
a = np.random.randint(0, 100, (4,4,3), dtype=np.uint8)
# get max values across channels, scaled by 255
maxx = np.max(a, axis=-1)/255
# scale a by maxx
a = (a / maxx[:,:, None]).astype(np.uint8)
输入(带有plt.imshow()
so in rgb
):
输出:
推荐阅读
- java - 如何验证序列中的 3 个数字是否相等?
- angular7 - get dom element by attribute in ionic 4
- python - Issues with compiling a Keras sequential model
- regex - 在关键字之前立即捕获引号中的文本
- docker - 无法 ping 到 Kubernetes 中工作节点的 Pod 的 IP
- php - Laravel 5.7 将我重定向到安装和系统要求
- c# - 组合和存储库模式
- javascript - 为什么我得到未定义的日志
- android - kotlin 中的双向数据绑定不起作用
- python - 如何按字符数的特定模式拆分字符串?