Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Python 如何在OpenCV中重新绘制皮肤?_Python_Image_Opencv_Image Processing - Fatal编程技术网

Python 如何在OpenCV中重新绘制皮肤?

Python 如何在OpenCV中重新绘制皮肤?,python,image,opencv,image-processing,Python,Image,Opencv,Image Processing,我正在为SeamlesClone使用OpenCV。我需要重新绘制不同颜色的皮肤,例如,它将是rgb(139,69,19)。如何使用浮雕和纹理 虽然您的问题似乎不够努力(您自己尝试了什么?),但这似乎是一个有趣的练习,因此我编写了一些代码,允许您使用滑块更改图像的rgb值。 滑块的范围从0到510。首先减去255,然后将其添加到图像的rgb值中。这意味着低于255的值是减法。值被剪裁为最小值和最大值(0和255)。 此过程在保持纹理和照明的同时更改颜色 结果: 代码: 将numpy导入为np 进

我正在为SeamlesClone使用OpenCV。我需要重新绘制不同颜色的皮肤,例如,它将是rgb(139,69,19)。如何使用浮雕和纹理


虽然您的问题似乎不够努力(您自己尝试了什么?),但这似乎是一个有趣的练习,因此我编写了一些代码,允许您使用滑块更改图像的rgb值。
滑块的范围从0到510。首先减去255,然后将其添加到图像的rgb值中。这意味着低于255的值是减法。值被剪裁为最小值和最大值(0和255)。
此过程在保持纹理和照明的同时更改颜色

结果:

代码:

将numpy导入为np
进口cv2
#加载图像
img=cv2.imread(“fGhx4.png”)
#创建窗口
cv2.namedWindow(“IMG”)
#设置默认值
红色=0
绿色=0
蓝色=0
#用于设置值的函数
def设定值(val):
全球蓝色
蓝色=val-255
色移()
def设置绿色(val):
全球绿色
绿色=val-255
色移()
def设置为红色(val):
全球红色
红色=val-255
色移()
#执行颜色移位的函数
def colorShift():
#创建工作副本
res=img.copy()
#调色
#将图层转换为uint16以容纳大于255的值
蓝色数组=np.uint16(res[:,:,0])+蓝色
#剪裁最小值和最大值-防止不必要的环绕
蓝色数组=np。其中(蓝色数组>255,255,蓝色数组)
蓝色数组=np。其中(蓝色数组<0,0,蓝色数组)
#转换回uint8并指定给图像层
res[:,:,0]=np.uint8(蓝色数组)
#修改绿色-相同流程
绿色层=np.uint16(res[:,:,1])+绿色
绿色层=np。其中(绿色层>255,255,绿色层)
绿色层=np。其中(绿色层<0,0,绿色层)
res[:,:,1]=np.uint8(绿色层)
#修改红色-相同的过程
红色层=np.uint16(res[:,:,2])+红色
红色层=np。其中(红色层>255,255,红色层)
红色层=np。其中(红色层<0,0,红色层)
res[:,:,2]=np.uint8(红色层)
#显示结果
cv2.imshow(“IMG”,res)
#创建轨迹栏以修改值
cv2.createTrackbar(“蓝色”、“IMG”、255510、蓝色)
cv2.createTrackbar(“绿色”、“IMG”、255510、设置绿色)
cv2.createTrackbar(“红色”、“IMG”、255510、设置红色)
#显示初始图像
cv2.imshow(“IMG”,IMG)
cv2.等待键(0)
cv2.destroyAllWindows()

我尝试了changeColor函数,这让我有点失望,我认为它确实实现了您描述的解决方案。谢谢,很棒的功能。
    import numpy as np
    import cv2
    # load image
    img = cv2.imread("fGhx4.png")
    # create window
    cv2.namedWindow("IMG")

    #set default values
    red = 0
    green = 0
    blue = 0

    # functions to set values
    def setBlue(val):
            global blue
            blue = val-255
            colorShift()

    def setGreen(val):
            global green
            green = val-255
            colorShift()

    def setRed(val):
            global red
            red = val-255
            colorShift()

    # function that performs the colorshift
    def colorShift():
            # create working copy
            res = img.copy()

            # modify hue
            # converted layer to uint16 to accomodate values larger than 255
            blue_array = np.uint16(res[:,:,0])+blue
            # clip min and max values - prevents unwanted wrap around
            blue_array = np.where(blue_array > 255 , 255, blue_array)
            blue_array = np.where(blue_array < 0, 0, blue_array)
            # convert back to uint8 and assign to image layer
            res[:,:,0] = np.uint8(blue_array)

            # modify green  - same process 
            green_layer = np.uint16(res[:,:,1])+green
            green_layer = np.where(green_layer > 255 , 255, green_layer)
            green_layer = np.where(green_layer < 0, 0, green_layer)
            res[:,:,1] = np.uint8(green_layer)

            # modify red - same process 
            red_layer = np.uint16(res[:,:,2])+red
            red_layer = np.where(red_layer > 255 , 255, red_layer)
            red_layer = np.where(red_layer < 0, 0, red_layer)
            res[:,:,2] = np.uint8(red_layer)

            # display result
            cv2.imshow("IMG", res)


    #create trackbars to modify values
    cv2.createTrackbar("Blue","IMG",255,510,setBlue)
    cv2.createTrackbar("Green","IMG",255,510,setGreen)
    cv2.createTrackbar("Red","IMG",255,510,setRed)

    # display initial image
    cv2.imshow("IMG", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()