Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV:设置每个RGB像素的亮度,使最亮的通道(R、G或B)达到最大值_Opencv - Fatal编程技术网

OpenCV:设置每个RGB像素的亮度,使最亮的通道(R、G或B)达到最大值

OpenCV:设置每个RGB像素的亮度,使最亮的通道(R、G或B)达到最大值,opencv,Opencv,对于RGB图像中的每个像素,我希望增加其亮度,以使该像素(R、G或B)的最强通道最大化。例如,如果像素的RGB值为(128、64、32),且最大通道值为255,则该像素应更改为大约(255、128、64)。这是一种穷人的阴影消除系统 我可以通过显式迭代像素来实现这一点,但这是非常低效的。通过使用严格的OpenCV方法,最有效的方法是什么?似乎它可能会使用YUV空间 (顺便说一句,我正在使用C#with EmguCV,但是一个简单的Python/OpenCV答案就可以了。编辑:但我不能使用Pyth

对于RGB图像中的每个像素,我希望增加其亮度,以使该像素(R、G或B)的最强通道最大化。例如,如果像素的RGB值为(128、64、32),且最大通道值为255,则该像素应更改为大约(255、128、64)。这是一种穷人的阴影消除系统

我可以通过显式迭代像素来实现这一点,但这是非常低效的。通过使用严格的OpenCV方法,最有效的方法是什么?似乎它可能会使用YUV空间


(顺便说一句,我正在使用C#with EmguCV,但是一个简单的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()

输出:


那么,这将分别“规范化”每个像素的三个通道,而不是规范化整个图像?(另外,不幸的是,我必须在C#中这样做,所以我不能使用其他Python库,比如numpy)嗯,这不是规范化了整个图像吗?我需要根据每个像素的通道值分别对其进行规格化。这将分别对每个像素进行规格化,因为
max
是在最后一个维度(通道)上进行的