gpt4 book ai didi

python - 使用 Python 更改图像中定义的颜色

转载 作者:行者123 更新时间:2023-12-02 17:19:33 27 4
gpt4 key购买 nike

我有一张包含女孩脸的图像,我想从使用 python 中的 RGB 识别的颜色开始改变她眼睛的颜色。我有这个颜色:

rbg_source=[85, 111, 47]
和这个颜色作为目的地
rbg_destination=[72.50445669, 56.82411376, 47.7519902]
将图像重建为原始图像,仅替换上述颜色。
你有想法在 python 中做到这一点吗?
我已经使用了以下解决方案:
 resized_image[np.all(resized_image == (85, 111, 47), axis=-1)] = (72.50445669, 56.82411376, 
47.7519902)

# Save result
cv2.imwrite('result1.png',resized_image)
但它返回一个糟糕的图像,没有预期的解决方案。
请在下面找到示例图像
image
在该图像中,我想更改右眼颜色,知道该颜色的 RGB,即 (5, 155, 122)

最佳答案

这是在 Python/OpenCV 中执行此操作的一种方法,因为我没有您想要使用的蓝色和绿色的相应 RGB 颜色。所以我将使用基线蓝色和绿色进行近似。

  • 读取输入
  • 转换为 HSV 和分离 channel
  • 指定蓝色和绿色色调并获得色调差异
  • 制作蒙版的绿色范围阈值
  • 使用形态清洁面膜
  • 将色调差异添加到色调 channel 并模 180
  • 将新色调、旧饱和度 channel 和偏向增加亮度以匹配左眼颜色并转换回 BGR 的旧值 channel 合并为 BGR
  • 使用蒙版合并新的BGR和原图
  • 保存结果

  • 输入:
    enter image description here
    import cv2
    import numpy as np

    # load image with alpha channel
    img = cv2.imread('eyes.png')

    # convert to HSV
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h,s,v = cv2.split(hsv)

    # blue is 240 in range 0 to 360; so half in OpenCV
    # green is 120 in range 0 to 360; so half in OpenCV
    blue_hue = 120
    green_hue = 60

    # diff hue (blue_hue - green_hue)
    diff_hue = blue_hue - green_hue

    # create mask for green color in hsv
    lower = (30,90,90)
    upper = (90,170,180)
    mask = cv2.inRange(hsv, lower, upper)
    mask = cv2.merge([mask,mask,mask])

    # apply morphology to clean mask
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
    mask = cv2.morphologyEx(mask, cv2.MORPH_ERODE, kernel)

    # modify hue channel by adding difference and modulo 180
    hnew = np.mod(h + diff_hue, 180).astype(np.uint8)

    # recombine channels and bias value to make brighter
    hsv_new = cv2.merge([hnew,s,v+60])

    # convert back to bgr
    bgr_new = cv2.cvtColor(hsv_new, cv2.COLOR_HSV2BGR)

    # blend with original using mask
    result = np.where(mask==(255, 255, 255), bgr_new, img)

    # save output
    cv2.imwrite('eyes_green_mask.png', mask)
    cv2.imwrite('eyes_green2blue.png', result)

    # Display various images to see the steps
    cv2.imshow('mask',mask)
    cv2.imshow('bgr_new',bgr_new)
    cv2.imshow('result',result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


    面具
    enter image description here
    色相和值偏移 BGR 图像:
    enter image description here
    结果:
    enter image description here
    补充:
    如果您知道确切的蓝色和绿色 BGR 颜色,则可以将它们分别转换为 HSV 并获得 H、S、V 差异。然后使用这些差异作为输入图像的 H、S、V channel 的偏差,并使用掩码将结果与原始结果结合起来,就像我在上面所做的那样。

    关于python - 使用 Python 更改图像中定义的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62879175/

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