13059l 2022-07-19 00:34 采纳率: 70.6%
浏览 60
已结题

这三张图片如何转化?

img

img

img


我应该采用那种方法实现三张图片的转化?我的想法是使用opencv的色彩空间转换但效果不理想,希望可以给出建议。

  • 写回答

2条回答 默认 最新

  • 天元浪子 优质创作者: python技术领域 2022-07-19 10:48
    关注

    第3张图有点琢磨不透,搞了一个近似的效果。

    import numpy as np
    import cv2
    
    def gamma_adjust(im, gamma=1.0):
        return (np.power(im.astype(np.float32)/255, 1/gamma)*255).astype(np.uint8)
    
    def sketch(data):    
        a = np.float32(data)
        depth = 10.                      # (0-100)
        grad = np.gradient(a)            #取图像灰度的梯度值
        grad_x, grad_y = grad            #分别取横纵图像梯度值
        grad_x = grad_x*depth/100.
        grad_y = grad_y*depth/100.
        A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
        uni_x = grad_x/A
        uni_y = grad_y/A
        uni_z = 1./A
             
        vec_el = np.pi/2.2                 # 光源的俯视角度,弧度值
        vec_az = np.pi/4.                  # 光源的方位角度,弧度值
        dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响
        dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响
        dz = np.sin(vec_el)                #光源对z 轴的影响
             
        b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)     #光源归一化
        b = b.clip(0,255)
        
        return np.uint8(b)
         
    
    im = cv2.imread(r'd:\529859161856163.jpeg', cv2.IMREAD_GRAYSCALE)
    im_2 = gamma_adjust(im, 2)
    im_3 = gamma_adjust(im, 3)
    cv2.imwrite(r'd:\gamma_2.jpeg', gamma_adjust(im, 2))
    cv2.imwrite(r'd:\gamma_3.jpeg', gamma_adjust(im, 3))
    cv2.imwrite(r'd:\sketch.jpeg', gamma_adjust(sketch(im_3)-16, 1/3))
    

    效果对比:
    原图

    img


    gamma = 2

    img


    gamma = 3

    img


    第三张图的近似效果

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 7月19日