python实现对图油画、卡通、梦幻、草图、水彩效果

这篇具有很好参考价值的文章主要介绍了python实现对图油画、卡通、梦幻、草图、水彩效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇博客将介绍如何使用wxPython模块和OpenCV库来实现对图像进行灰度化、二值化、伽马校正、色彩空间转换和图像反转这5种效果的合并程序。程序可以通过wxPython提供的GUI界面来选择图片路径和效果类型,程序会将处理后的图像保存到指定路径并打开。

步骤一:安装wxPython和OpenCV库

首先需要安装wxPython和OpenCV库。可以使用pip命令来安装:

pip install wxPython
pip install opencv-contrib-python

步骤二:创建GUI界面

我们可以使用wxPython来创建一个GUI界面,包括一个选择文件路径的按钮、一个下拉框来选择效果类型、一个处理按钮和一个输出路径文本框。代码如下:

import cv2
import wx
import os

class ImageTransformer(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Image Transformer')
        self.panel = wx.Panel(self)
        self.image_path = None
        self.effect_choice = None
        self.create_widgets()
        self.Show()

    def create_widgets(self):
        # 创建选择文件按钮
        self.file_picker = wx.FilePickerCtrl(self.panel, wildcard='Image files (*.jpg;*.jpeg;*.png)|*.jpg;*.jpeg;*.png')
        self.file_picker.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_file_pick)
        # 创建效果选择下拉框
        self.effects = ['Oil Painting', 'Watercolor', 'Sketch', 'Cartoon', 'Dreamy']
        self.effect_choice = wx.Choice(self.panel, choices=self.effects)
        # 创建转换按钮
        self.transform_button = wx.Button(self.panel, label='Transform', size=(100, 30))
        self.transform_button.Bind(wx.EVT_BUTTON, self.on_transform)
        # 创建状态栏
        self.status_bar = self.CreateStatusBar()
        # 创建布局
        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(self.file_picker, 0, wx.ALL|wx.EXPAND, 5)
        main_sizer.Add(self.effect_choice, 0, wx.ALL|wx.CENTER, 5)
        main_sizer.Add(self.transform_button, 0, wx.ALL|wx.CENTER, 5)
        self.panel.SetSizer(main_sizer)

    def on_file_pick(self, event):
        # 获取选择的文件路径
        self.image_path = event.GetPath()
        self.status_bar.SetStatusText(f'Selected file: {self.image_path}')

这是一个基于wxPython库的图像转换应用程序的代码。它创建了一个名为"Image Transformer"的窗口,并提供了以下功能:

  1. 创建选择文件按钮:使用wx.FilePickerCtrl创建一个按钮,允许用户选择图像文件。通过设置wildcard参数,只显示特定类型的图像文件(.jpg、.jpeg、.png)。

  2. 创建效果选择下拉框:使用wx.Choice创建一个下拉框,供用户选择要应用的图像效果。下拉框中提供了"Oil Painting"、"Watercolor"、"Sketch"、"Cartoon"和"Dreamy"这些选项。

  3. 创建转换按钮:使用wx.Button创建一个按钮,标有"Transform",用于触发图像转换操作。

  4. 创建状态栏:使用CreateStatusBar方法创建一个状态栏,用于显示当前选择的图像文件路径。

  5. 创建布局:使用wx.BoxSizer创建一个垂直布局管理器,将上述组件添加到主面板中,并设置相应的边距和对齐方式。

  6. on_file_pick方法:当用户选择图像文件时,该方法将获取所选文件的路径,并在状态栏中显示该路径。

步骤三:实现图像处理

在OnProcess函数中,我们需要实现图像的处理。我们可以使用OpenCV库来实现灰度化、二值化、伽马校正、色彩空间转换和图像反转这5种效果。代码如下:

import cv2
import wx
import os

class ImageTransformer(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Image Transformer')
        self.panel = wx.Panel(self)
        self.image_path = None
        self.effect_choice = None
        self.create_widgets()
        self.Show()

    def create_widgets(self):
        # 创建选择文件按钮
        self.file_picker = wx.FilePickerCtrl(self.panel, wildcard='Image files (*.jpg;*.jpeg;*.png)|*.jpg;*.jpeg;*.png')
        self.file_picker.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_file_pick)
        # 创建效果选择下拉框
        self.effects = ['Oil Painting', 'Watercolor', 'Sketch', 'Cartoon', 'Dreamy']
        self.effect_choice = wx.Choice(self.panel, choices=self.effects)
        # 创建转换按钮
        self.transform_button = wx.Button(self.panel, label='Transform', size=(100, 30))
        self.transform_button.Bind(wx.EVT_BUTTON, self.on_transform)
        # 创建状态栏
        self.status_bar = self.CreateStatusBar()
        # 创建布局
        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(self.file_picker, 0, wx.ALL|wx.EXPAND, 5)
        main_sizer.Add(self.effect_choice, 0, wx.ALL|wx.CENTER, 5)
        main_sizer.Add(self.transform_button, 0, wx.ALL|wx.CENTER, 5)
        self.panel.SetSizer(main_sizer)

    def on_file_pick(self, event):
        # 获取选择的文件路径
        self.image_path = event.GetPath()
        self.status_bar.SetStatusText(f'Selected file: {self.image_path}')

    def on_transform(self, event):
        # 获取选择的效果
        effect = self.effect_choice.GetStringSelection()
        # 应用所选效果
        if effect == 'Oil Painting':
            result = self.apply_oil_painting_effect()
        elif effect == 'Watercolor':
            result = self.apply_watercolor_effect()
        elif effect == 'Sketch':
            result = self.apply_sketch_effect()
        elif effect == 'Cartoon':
            result = self.apply_cartoon_effect()
        elif effect == 'Dreamy':
            result = self.apply_dreamy_effect()
        else:
            self.status_bar.SetStatusText('Please select an effect')
            return
        # 获取原始文件名和扩展名
        filename, ext = os.path.splitext(self.image_path)
        # 拼接输出文件名
        output_path = f'{filename}_{effect}{ext}'
        # 保存结果
        cv2.imwrite(output_path, result)
        # 打开转换后的图片
        os.startfile(output_path)

    # def apply_oil_painting_effect(self, brush_radius=6, intensity=1):
    #     # 加载图像
    #     image = cv2.imread(self.image_path)
    #     # 应用油画效果
    #     oil_painting = cv2.xphoto.createOilPaintingFilter(brush_radius, intensity)
    #     result = oil_painting.apply(image)
    #     return result
    def apply_oil_painting_effect(self, brush_radius=6, intensity=1):
        # 加载图像
        image = cv2.imread(self.image_path)
        # 转换为灰度图像
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        # 应用中值模糊
        gray = cv2.medianBlur(gray, brush_radius + 1)
        # 增强对比度
        gray = cv2.addWeighted(gray, 2.5, cv2.GaussianBlur(gray, (0, 0), brush_radius / 30), -0.5, 0)
        # 将灰度图像转换为彩色图像
        result = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
        return result   
    def apply_watercolor_effect(self, sigma_s=60, sigma_r=0.4):
        # 加载图像
        image = cv2.imread(self.image_path)
        # 应用水彩效果
        watercolor = cv2.stylization(image, sigma_s=sigma_s, sigma_r=sigma_r)
        result = cv2.cvtColor(watercolor, cv2.COLOR_BGR2RGB)
        return result

    def apply_sketch_effect(self):
        # 加载图像
        image = cv2.imread(self.image_path)
        # 将图像转换为灰度图像
        gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        # 将灰度图像转换为边缘图像
        edges = cv2.Canny(gray_image, 30, 100)
        # 将边缘图像转换为彩色图像
        sketch = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
        return sketch

    def apply_cartoon_effect(self):
        # 加载图像
        image = cv2.imread(self.image_path)
        # 将图像转换为灰度图像
        gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        # 应用均值迁移滤波器以平滑图像
        filtered = cv2.pyrMeanShiftFiltering(image, 20, 50)
        #将平滑图像转换为灰度图像
        gray_filtered = cv2.cvtColor(filtered, cv2.COLOR_BGR2GRAY)
        # 应用边缘检测
        edges = cv2.adaptiveThreshold(gray_filtered, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 5)
        # 应用双边滤波器以增强边缘
        colored_edges = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
        cartoon = cv2.bitwise_and(filtered, colored_edges)
        return cartoon

    def apply_dreamy_effect(self, blend_alpha=0.5):
        # 加载图像
        image = cv2.imread(self.image_path)
        # 将图像转换为浮点数格式
        image = image.astype(float) / 255.0
        # 应用高斯模糊以减少噪声
        blurred = cv2.GaussianBlur(image, (7, 7), 0)
        # 将图像与模糊图像混合
        dreamy = cv2.addWeighted(image, 1 - blend_alpha, blurred, blend_alpha, 0)
        return dreamy

if __name__ == '__main__':
    app = wx.App()
    transformer = ImageTransformer()
    app.MainLoop()

这是一个Python类中的几个方法,用于应用不同的图像效果。每个方法都需要一个指向图像文件的路径作为输入,并返回处理后的图像。

  1. apply_oil_painting_effect方法:该方法使用OpenCV库将输入图像转换为灰度图像,然后应用中值模糊和增强对比度的技术,最后将灰度图像转换为彩色图像,并返回结果。

  2. apply_watercolor_effect方法:该方法使用OpenCV库实现水彩效果,通过调节参数sigma_ssigma_r来控制效果的强度,并将结果转换为RGB格式并返回。

  3. apply_sketch_effect方法:该方法将输入图像转换为灰度图像,然后使用Canny算法将其转换为边缘图像,最后将边缘图像转换为彩色图像并返回。

  4. apply_cartoon_effect方法:该方法将输入图像转换为灰度图像,然后通过应用均值迁移滤波器以平滑图像,并使用自适应阈值进行边缘检测,最后使用双边滤波器增强边缘并返回结果。

  5. apply_dreamy_effect方法:该方法将输入图像转换为浮点数格式,然后使用高斯模糊以减少噪声,并将图像与模糊图像混合,最后返回结果。混合系数由参数blend_alpha控制。

到此,我们的程序就完成了。您可以将上述代码保存到一个名为photoconvert5type.py的文件中,并运行它来测试程序。当程序运行时,您可以使用GUI界面中的打开按钮来选择一个图像文件,然后选择一个效果类型,最后点击处理按钮。程序将会创建一个新的文件,保存处理后的图像,并打开它。

python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换

 

python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换 python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换
python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换 python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换
python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换 python实现对图油画、卡通、梦幻、草图、水彩效果,python,cv2,转换

 总结

本篇博客介绍了如何使用wxPython模块和OpenCV库来实现对图像进行灰度化、二值化、伽马校正、色彩空间转换和图像反转这5种效果的合并程序。程序可以通过wxPython提供的GUI界面来选择图片路径和效果类型,程序会将处理后的图像保存到指定路径并打开。如果您对这个程序感兴趣,可以尝试添加一些额外的效果,例如边缘检测或图像平滑。文章来源地址https://www.toymoban.com/news/detail-636350.html

到了这里,关于python实现对图油画、卡通、梦幻、草图、水彩效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 吉卜力风格水彩画怎么画?

    著名的水彩艺术家陈坚曾说:“水彩是用水润调和形成的饱和度极高的艺术画面,在纸上晕染的画面面积、强度等具有许多随意性,天空的颜色乌云密布,都是很随意的,难以模仿。” 是的,水彩画的妙处就在于不确定的美感。色彩在叠加之时有了水这个媒介,有了独特的韵

    2024年02月09日
    浏览(29)
  • 使用 OpenCV 和 Python 卡通化图像-附源码

    在本文中,我们将构建一个有趣的应用程序,它将卡通化提供给它的图像。为了构建这个卡通化器应用程序,我们将使用 python 和 OpenCV。这是机器学习令人兴奋的应用之一。在构建此应用程序时,我们还将了解如何使用 easygui、Tkinter 等库。在这里,您必须选择图像,然后应用

    2024年02月14日
    浏览(42)
  • 说说你对图的理解?相关操作有哪些?

    在计算机科学中,图是一种抽象的数据类型,在图中的数据元素通常称为结点, V 是所有顶点的集合, E 是所有边的集合 如果两个顶点 v , w ,只能由 v 向 w ,而不能由 w 向 v ,那么我们就把这种情况叫做一个从  v  到  w  的有向边。 v 也被称做初始点, w 也被称为终点。这

    2024年04月22日
    浏览(47)
  • Midjourney 生成油画技巧

    笔刷比较细,图像更精细 笔刷比较粗,图像没那么精细,但更有油画的感觉 更多细节 以 detailed oil painting, (prompt…), scumbling,生出来的图有更多的细节,但是会让画面看起来不像油画了 色块 Color field Color blocking Palette knife 调色刀 色块感更强 impressionism 印象派 笔触/笔刷每次

    2024年02月07日
    浏览(52)
  • UE 油画滤镜

    非真实感渲染的风格不经相同,其中一种便是油画风格,本文总结了如何实现油画滤镜的方法 为什么使用Kuwahara Filter? 一般对图像进行模糊处理,会使用低通滤波器,但往往模糊后图像会失去它们的硬边,但Kuwahara Filter可以在 平滑图像 的同时也能 保留其硬边 如何实现Kuwah

    2024年02月08日
    浏览(23)
  • Python实现樱花飘落效果

    Python实现樱花飘落效果 樱花飘落的美丽景象常常令人陶醉,而在Python中,我们可以通过一些简单的代码实现一个樱花飘落的效果。本文将介绍如何使用Python编程语言实现这一效果。 首先,我们需要导入一些必要的库: 接下来,我们可以定义一些常量来控制樱花的行为和屏幕

    2024年02月06日
    浏览(36)
  • 校园一卡通管理信息系统的设计与实现(asp.net)

    目 录 摘 要 I Abstract II 一、 绪论 1 (一) 课题来源及研究意义 1 (二) 国内现状 1 (三) 研究主要内容 2 二、 需求分析 4 (一) 可行性分析 4 (二) 功能需求 4 1. 充值管理 4 2. 取款管理 5 3. 挂失管理 5 4. 解挂管理 5 5. 补卡管理 5 6. 换卡管理 5 7. 业务统计 5 8.

    2024年02月06日
    浏览(49)
  • Python实现视频加速效果(完整代码)

    Python实现视频加速效果(完整代码) 在日常生活中,我们可能需要对某些视频进行编辑,如加速、慢放等效果。Python作为一种以数据分析和计算为主要应用的脚本语言,拥有处理视频的能力。本文将提供Python实现视频加速效果的完整代码,供大家进行参考。 首先我们需要安装所

    2024年02月14日
    浏览(48)
  • Python:实现图片叠加效果,附带完整源代码

    Python:实现图片叠加效果,附带完整源代码 在图像处理中,叠加图片是一种广泛应用且非常实用的技术。通过将两张或多张图片叠加在一起,可以达到更好的视觉效果。本文将介绍如何使用Python实现图片叠加功能,并提供完整的源代码。 首先需要安装所需的Python库——Pill

    2024年02月11日
    浏览(51)
  • 使用Python的pygame库实现下雪的效果

    关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 先给出效果图: 源码如下: 下面给出改进版 效果图: 使用一张背景图片(我这里文件名:snow_background.jpg),和代码文件放在同一目录下  源码如下: 附:RGB 颜色表   https://www.codeeeee.com

    2024年01月19日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包