gpt4 book ai didi

iphone - 更改颜色替换中的亮度

转载 作者:太空狗 更新时间:2023-10-30 03:28:51 26 4
gpt4 key购买 nike

我正在努力用用户选择的颜色替换图像中的某些颜色。我正在使用 OpenCV 进行颜色替换。

简而言之,我描述了我从哪里得到帮助以及得到了什么。

  1. How to change a particular color in an image?我已经按照步骤或从上述链接的答案中获取了基本思想。在那个链接的正确答案中,那个人告诉你只需要改变颜色替换的色调。

  2. 之后我遇到了类似的问题 color replacement in image for iphone application (即对于那些完全是初学者的颜色替换来说,这是一个很好的代码)
    从那个问题中,我想到我还需要更改“饱和度”。


现在我遇到了类似的问题

“当我的源图像太亮(即亮度高)并且我用一些深色替换颜色时,替换图像中的颜色看起来很亮而不是暗,因为看起来替换的颜色不匹配使用我们完成替换的颜色”

发生这种情况是因为我没有考虑更换时的亮度。在这里我被困住了改变亮度的公式或想法是什么?

假设我用目标颜色的亮度替换图像的亮度,那么它看起来像平面替换,图像将失去它的实际阴影或边缘。

编辑:
当我考虑替换源的亮度(即要处理的像素)时,我面临一个问题。让我根据我的应用场景来解释。

例如,我正在更改汽车的颜色(如 whiteAngl 说明),然后我正在删除新上色汽车的一些部分。我再次对删除的部分进行重新着色,但现在发生的是删除后的颜色和删除前的颜色不匹配,因为两次我得到不同的亮度,因为两次我要处理的像素都发生了变化,并且由于亮度颜色在输出中改变。如何克服这个问题

任何帮助将不胜感激

Coloured Image Erased Few portion Recoloured

最佳答案

在没有看到您尝试过的代码的情况下,很难猜出您做错了什么。为了用一个具体的例子向您展示这是如何完成的,让我们改变这辆车丑陋的蓝色:

enter image description here

这个简短的 python 脚本展示了我们如何使用 HSV 颜色空间更改颜色:

import cv2
orig = cv2.imread("original.jpg")
hsv = cv2.cvtColor(orig, cv2.COLOR_BGR2HSV)
hsv[:,:,0] += 100
bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite('changed.jpg', bgr)

你会得到: enter image description here

关于 wikipedia你看到色调在 0 到 360 度之间,但对于 OpenCV 中的值,请参见 the documentation .你看我为图像中每个像素的色调添加了 100。我猜您想更改图像的一部分的颜色,但您可能从上面的脚本中得到了这个想法。

这里是如何获得请求的深红色汽车。首先我们得到红色的: red card

深红色的,我试图保留其中的金属感: dark red car

正如我所说,您用来移动颜色光线的方程式取决于您希望物体使用的 Material 。在这里,我想出了一个快速而肮脏的方程式来保持汽车的金属 Material 。此脚本从第一张浅蓝色汽车图像生成上面的深红色汽车图像:

import cv2
orig = cv2.imread("original.jpg")
hls = cv2.cvtColor(orig, cv2.COLOR_BGR2HLS)
hls[:,:,0] += 80 # change color from blue to red, hue
for i in range(1,50): # 50 times reduce lightness
# select indices where lightness is greater than 0 (black) and less than very bright
# 220-i*2 is there to reduce lightness of bright pixel fewer number of times (than 50 times),
# so in the first iteration we don't reduce lightness of pixels which have lightness >= 200, in the second iteration we don't touch pixels with lightness >= 198 and so on
ind = (hls[:,:,1] > 0) & (hls[:,:,1] < (220-i*2))
# from the lightness of the selected pixels we subtract 1, using trick true=1 false=0
# so the selected pixels get darker
hls[:,:,1] -= ind
bgr = cv2.cvtColor(hls, cv2.COLOR_HLS2BGR)
cv2.imwrite('changed.jpg', bgr)

关于iphone - 更改颜色替换中的亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com