通过Python代码实现照片秒变艺术素描画效果

Written by

in

文章目录
  • 安装必要的第三方库 pip install opencv-python pip install numpy pip install matplotlib # 用于在Jupyter Notebook或脚本中方便地显示图像
  • 灰度化:素描是黑白的,所以第一步是去除色彩信息。 反转与模糊:这是最关键的一步,我们通过反转灰度图并进行高斯模糊,来创建出图像的“底片”,这为后面生成线条打下基础。 混合:将原始的灰度图与模糊后的“底片”进行混合,创造出类似铅笔笔触的明暗对比效果。
  • 我们把上述步骤翻译成 Python 和 OpenCV 代码。 import cv2 import matplotlib.pyplot as plt def image_to_sketch(image_path): “”” 将指定路径的图像转换为素描风格。 “”” # 步骤 1: 读取图像并转换为灰度图 # cv2.imread() 用于读取图片 # cv2.cvtColor() 用于转换颜色空间,cv2.COLOR_BGR2GRAY 表示从BGR(OpenCV默认)转为灰度 img_bgr = cv2.imread(image_path) if img_bgr is None: print(f”错误: 无法读取图片,请检查路径 ‘{image_path}’ 是否正确。”) return img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) # 步骤 2: 反转灰度图 (形成“底片”) # cv2.bitwise_not() 用于按位取反,白色变黑色,黑色变白色 img_gray_inverted = cv2.bitwise_not(img_gray) # 步骤 3:对反转后的图像进行高斯模糊 # cv2.GaussianBlur() 用于模糊图像,以平滑细节 # (21, 21) 是高斯核的大小,必须是奇数,值越大,模糊程度越高 img_blur = cv2.GaussianBlur(img_gray_inverted, (21, 21), 0) # 步骤 4: 再次反转模糊后的图像 img_blur_inverted = cv2.bitwise_not(img_blur) # 步骤 5: 关键一步!用颜色减淡(Color Dodge)方法混合灰度图和模糊反转图 # cv2.divide() 将两个图像相除,可以模拟出颜色减淡的效果 # 256.0 是为了防止除以0的错误,并确保结果是浮点数以便精确计算 img_sketch = cv2.divide(img_gray, img_blur_inverted, scale=256.0) return img_bgr, img_sketch # — 主程序 — if __name__ == “__main__”: # 替换成你自己的图片路径 input_image_path = ‘my_photo.jpg’ original_image, sketch_image = image_to_sketch(input_image_path) if original_image is not None and sketch_image is not None: # 使用 Matplotlib 显示原始图像和素描图像 plt.figure(figsize=(10, 5)) # 显示原始图像 (注意OpenCV的BGR要转为RGB) plt.subplot(1, 2, 1) plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) plt.title(‘Original Image’) plt.axis(‘off’) # 显示素描图像 plt.subplot(1, 2, 2) plt.imshow(sketch_image, cmap=’gray’) plt.title(‘Sketch’) plt.axis(‘off’) plt.show() # 如果想保存结果 output_image_path = ‘my_photo_sketch.jpg’ cv2.imwrite(output_image_path, sketch_image) print(f”素描图像已保存至: {output_image_path}”)
  • 到此这篇关于通过Python代码实现照片秒变艺术素描画效果的文章就介绍到这了,更多相关Python照片素描画效果内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 使用Python打造专业级老照片修复工具 利用Python打造一个逼真的照片桌面 使用Python实现照片按照日期自动分类的操作指南 Python利用Streamlit构建一个简单的照片墙应用 基于Python和MoviePy实现照片管理和视频合成工具
  • 目录
    • 准备工作
    • 素描效果的“三步走”战略
    • 示例代码
    • 效果
    • 结语

    安装必要的第三方库

    pip install opencv-python
    pip install numpy
    pip install matplotlib # 用于在Jupyter Notebook或脚本中方便地显示图像
    

    1. 灰度化:素描是黑白的,所以第一步是去除色彩信息。
    2. 反转与模糊:这是最关键的一步,我们通过反转灰度图并进行高斯模糊,来创建出图像的“底片”,这为后面生成线条打下基础。
    3. 混合:将原始的灰度图与模糊后的“底片”进行混合,创造出类似铅笔笔触的明暗对比效果。

    我们把上述步骤翻译成 Python 和 OpenCV 代码。

    import cv2
    import matplotlib.pyplot as plt
    
    def image_to_sketch(image_path):
        """
        将指定路径的图像转换为素描风格。
        """
        # 步骤 1: 读取图像并转换为灰度图
        # cv2.imread() 用于读取图片
        # cv2.cvtColor() 用于转换颜色空间,cv2.COLOR_BGR2GRAY 表示从BGR(OpenCV默认)转为灰度
        img_bgr = cv2.imread(image_path)
        if img_bgr is None:
            print(f"错误: 无法读取图片,请检查路径 '{image_path}' 是否正确。")
            return
          
        img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
    
        # 步骤 2: 反转灰度图 (形成“底片”)
        # cv2.bitwise_not() 用于按位取反,白色变黑色,黑色变白色
        img_gray_inverted = cv2.bitwise_not(img_gray)
    
        # 步骤 3:对反转后的图像进行高斯模糊
        # cv2.GaussianBlur() 用于模糊图像,以平滑细节
        # (21, 21) 是高斯核的大小,必须是奇数,值越大,模糊程度越高
        img_blur = cv2.GaussianBlur(img_gray_inverted, (21, 21), 0)
    
        # 步骤 4: 再次反转模糊后的图像
        img_blur_inverted = cv2.bitwise_not(img_blur)
      
        # 步骤 5: 关键一步!用颜色减淡(Color Dodge)方法混合灰度图和模糊反转图
        # cv2.divide() 将两个图像相除,可以模拟出颜色减淡的效果
        # 256.0 是为了防止除以0的错误,并确保结果是浮点数以便精确计算
        img_sketch = cv2.divide(img_gray, img_blur_inverted, scale=256.0)
    
        return img_bgr, img_sketch
    
    # --- 主程序 ---
    if __name__ == "__main__":
        # 替换成你自己的图片路径
        input_image_path = 'my_photo.jpg' 
      
        original_image, sketch_image = image_to_sketch(input_image_path)
    
        if original_image is not None and sketch_image is not None:
            # 使用 Matplotlib 显示原始图像和素描图像
            plt.figure(figsize=(10, 5))
    
            # 显示原始图像 (注意OpenCV的BGR要转为RGB)
            plt.subplot(1, 2, 1)
            plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB))
            plt.title('Original Image')
            plt.axis('off')
    
            # 显示素描图像
            plt.subplot(1, 2, 2)
            plt.imshow(sketch_image, cmap='gray')
            plt.title('Sketch')
            plt.axis('off')
    
            plt.show()
    
            # 如果想保存结果
            output_image_path = 'my_photo_sketch.jpg'
            cv2.imwrite(output_image_path, sketch_image)
            print(f"素描图像已保存至: {output_image_path}")
    

    到此这篇关于通过Python代码实现照片秒变艺术素描画效果的文章就介绍到这了,更多相关Python照片素描画效果内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 使用Python打造专业级老照片修复工具
    • 利用Python打造一个逼真的照片桌面
    • 使用Python实现照片按照日期自动分类的操作指南
    • Python利用Streamlit构建一个简单的照片墙应用
    • 基于Python和MoviePy实现照片管理和视频合成工具

    站内搜索