当前位置: 首页 > news >正文

使用Python和wxPython将图片转换为草图

导语:
将照片转换为艺术风格的草图是一种有趣的方式,可以为您的图像添加独特的效果。在本文中,我们将介绍如何使用Python编程语言和wxPython图形用户界面库来实现这一目标。我们将探讨如何使用OpenCV库将图像转换为草图,并使用wxPython创建一个简单的界面,使用户能够选择并转换图像。

1. 安装依赖库

在开始之前,确保您已安装以下库:

  • Python编程语言
  • OpenCV库
  • wxPython库

您可以使用pip命令来安装缺少的库。在命令行中运行以下命令:

pip install opencv-python

2. 图像转换为草图的代码

首先,我们需要编写一个函数来将图像转换为草图。我们将使用OpenCV库中的功能来实现这一点。以下是一个示例函数:

import cv2def convert_to_sketch(image_path):# 加载图像image = cv2.imread(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

这个函数会加载图像,将其转换为灰度图像,然后将灰度图像转换为边缘图像。最后,它将边缘图像转换回彩色图像,以产生草图效果。

3. 创建图形用户界面

接下来,我们将使用wxPython库创建一个简单的图形用户界面,以便用户能够选择要转换的图像并查看转换后的草图。以下是一个示例代码:

import wx
import cv2def convert_to_sketch(image_path):# 加载图像image = cv2.imread(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 sketchdef save_sketch(image_path, sketch):# 获取原始文件名和扩展名file_name, extension = image_path.rsplit('.', 1)# 构建保存的文件名save_path = f"{file_name}(sketch).{extension}"# 保存素描图像cv2.imwrite(save_path, sketch)def main():# 选择图像文件app = wx.App()dialog = wx.FileDialog(None, "选择图像文件", wildcard="图像文件 (*.jpg;*.png)|*.jpg;*.png", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)if dialog.ShowModal() == wx.ID_OK:image_path = dialog.GetPath()# 将图像转换为素描sketch = convert_to_sketch(image_path)# 保存素描图像save_sketch(image_path, sketch)print("转换完成!")dialog.Destroy()app.MainLoop()if __name__ == "__main__":main()

这段代码创建了一个文件对话框,允许用户选择要转换的图像文件。选择图像后,代码将调用convert_to_sketch函数将图像转换为草图,并使用OpenCV库显示转换后的草图。

 

 

4. 结论

通过使用Python编程语言和wxPython库,我们可以轻松地将图像转换为草图。我们使用OpenCV库提供的功能将图像转换为灰度图像和边缘图像,并最终生成具有草图效果的图像。通过创建一个简单的图形用户界面,我们使用户能够选择图像并查看转换后的草图。这为用户提供了一个简单而有趣的方式来探索图像处理技术。

相关文章:

使用Python和wxPython将图片转换为草图

导语: 将照片转换为艺术风格的草图是一种有趣的方式,可以为您的图像添加独特的效果。在本文中,我们将介绍如何使用Python编程语言和wxPython图形用户界面库来实现这一目标。我们将探讨如何使用OpenCV库将图像转换为草图,并使用wxPython创建一…...

深入浅出对话系统——闲聊对话系统进阶

引言 本文主要关注生成式闲聊对话系统的进阶技术。 基于Transformer的对话生成模型 本节主要介绍GPT系列文章,这是由OpenAI团队推出的,现在大火的ChatGPT也是它们推出的。 GPT : Improving Language Understanding by Generative Pre-Traini ng 在自…...

List与Set的区别

List与Set的区别 大家好,在我们平时的代码编写过程中,经常会碰到需要使用到集合类型: List与Set。很多时候,我们可能会将它们视为同一种类型进行使用,但是在实际的编程逻辑中,它们之间是存在很大差别的。接下来我们就…...

MyBatis 实战指南:探索灵活持久化的艺术

文章目录 前言一、初识 MyBatis1.1 什么是 MyBatis1.2 为什么学习 MyBatis 二、MyBatis 在软件开发框架中的定位三、基于 Spring Boot 创建 MyBatis 项目3.1 添加 MyBatis 框架的支持3.2 配置数据库连接信息和映射文件的保存路径(Mapper XML) 四、MyBati…...

高中教师能去美国做访问学者吗?

美国作为世界上高等教育水平较高的国家之一,吸引了众多学者前往交流学习。那么高中教师是否能够成为美国访问学者,这是当然的,高中老师是可以出国访学的,但是出国做访问学者会涉及到多方面的因素。 首先,教师个人的学术…...

93 | Python 设计模式 —— 建造者模式

文章目录 什么是建造者模式?建造者模式的四个角色Python建造者模式示例建造者模式的优点建造者模式的适用场景案例1:股票价格监控案例2:天气预报系统总结当构建复杂对象时,经常会遇到对象的创建过程非常复杂、包含多个步骤、或者有不同的配置选项。这时,使用建造者模式是一…...

nacos升级开启鉴权后,微服务无法连接的解决方案

版本: 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本,开启鉴权 1.在application.properties配置文件开启鉴权&…...

elementui弹窗页按钮重复提交问题解决

一、BUG场景 ruoyi平台&#xff0c;页面弹出窗有提交按钮&#xff0c;在提交时连续多次点击会发生重复提交。 二、错误方案 给按钮增加 :loading"submitLoading" 属性。 <el-dialog :title"title" :v-if"open" :visible.sync"open&…...

HBase-读流程

创建连接同写流程。 &#xff08;1&#xff09;读取本地缓存中的Meta表信息&#xff1b;&#xff08;第一次启动客户端为空&#xff09; &#xff08;2&#xff09;向ZK发起读取Meta表所在位置的请求&#xff1b; &#xff08;3&#xff09;ZK正常返回Meta表所在位置&#x…...

Matlab绘图 图例legend 太长,怎么减小指示线的长度

来源 绘图时&#xff0c;稍微减小文字已经不能正常放下图例&#xff0c;想通过调整图例指示线段长度缩减整个图例长度。 方法一 参考matlab官方论坛 leg legend(Plot1,Plot2,...); leg.ItemTokenSize [x1,x2]; By default x130 and x218 so put larger or smaller number…...

力扣17(电话号码中的字符组合)

题目表述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例1 输入&#xff1a;digits "23" 输出&#xff1…...

vue+element 下载压缩包和导出

export function goodsInspectionReportDwnloadZip (params) {return axios({url: "/warehouse-entry-server/v1/goodsInspectionReport/downloadZip",method: "get",params,responseType: "blob"}) } //下载handleDownloadFile() {if (!this.$r…...

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署&#xff1a; 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …...

hive编译报错整理

背景 最近在修hive-1.2.0的一个bug&#xff0c;需要修改后重新打包部署到集群&#xff0c;打包的时候报下面的错误&#xff0c;原因很简单&#xff0c;从远程仓库里面已经拉不到这个包了。 org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde was not found in http…...

centos磁盘爆满可以清理mysql-bin.000011吗

mysql-bin.000011 是 MySQL 的二进制日志文件&#xff0c;用于记录数据库中的更改操作。删除该文件可能会导致数据库恢复、备份和复制等功能的中断或数据丢失。因此&#xff0c;在删除任何 MySQL 的二进制日志文件之前&#xff0c;请确保您了解其潜在影响并采取适当的备份措施。…...

SSM个人博客项目

文章目录 SSM个人博客系统实现项目介绍 一、准备工作0. 创建项目添加对应依赖1. 数据库设计2. 定时实体类 二、功能实现1.统一功能处理统一返回格式统一异常处理定义登录拦截器 2. 注册登录实现生成获取验证码密码加盐实现注册功能登录功能注销功能 3.登录用户博客列表获取登录…...

vue插槽是什么?如何使用?

1、意义 插槽是vue提供的一个内置组件&#xff0c;是一个占位符。作用是可以向组件中传递一段html代码&#xff0c;加强了组件封装性以及复用性。 2、分类 插槽通常分为匿名插槽、具名插槽、作用域插槽 匿名插槽&#xff1a; 顾名思义就是没有名字的插槽&#xff0c;我们通…...

yum常用操作命令

目录 查询命令 查看当前所有仓库 检查可升级的程序 安装、卸载、升级 清除缓存命令 生成缓存 查询命令 列出已安装的软件包&#xff1a;yum list installed列出仓库中还未安装的软件包&#xff1a;yum list available列出指定软件包的依赖关系&#xff1a;yum deplist &…...

.Net C# 免费PDF合成软件

最近用到pdf合成&#xff0c;发现各种软件均收费啊&#xff0c;这个技术非常简单&#xff0c;别人写好的库一大把&#xff0c;这里用到了PDFsharp&#xff0c;项目地址Home of PDFsharp and MigraDoc Foundation 软件下载地址 https://download.csdn.net/download/g313105910…...

JAVA集合框架 一:Collection(LIst,Set)和Iterator(迭代器)

目录 一、Java 集合框架体系 1.Collection接口&#xff1a;用于存储一个一个的数据&#xff0c;也称单列数据集合&#xff08;single&#xff09;。 2.Map接口&#xff1a;用于存储具有映射关系“key-value对”的集合&#xff08;couple&#xff09; 3.Iterator接口&#…...

WebDataset商业应用:企业级深度学习项目的数据管理策略

WebDataset商业应用&#xff1a;企业级深度学习项目的数据管理策略 【免费下载链接】webdataset A high-performance Python-based I/O system for large (and small) deep learning problems, with strong support for PyTorch. 项目地址: https://gitcode.com/gh_mirrors/w…...

Kook Zimage真实幻想Turbo参数详解:Steps和CFG Scale怎么设效果最好?

Kook Zimage真实幻想Turbo参数详解&#xff1a;Steps和CFG Scale怎么设效果最好&#xff1f; 1. 理解核心参数的意义 在AI绘画中&#xff0c;Steps&#xff08;步数&#xff09;和CFG Scale&#xff08;提示词引导系数&#xff09;是影响生成效果最直接的两个参数。它们就像烹…...

如何用OpenCore Legacy Patcher让老款Mac焕发新生:终极完整教程

如何用OpenCore Legacy Patcher让老款Mac焕发新生&#xff1a;终极完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款革…...

腾讯优图Youtu-VL-4B-Instruct应用案例:电商商品自动描述、教育图表解析实战

腾讯优图Youtu-VL-4B-Instruct应用案例&#xff1a;电商商品自动描述、教育图表解析实战 1. 引言&#xff1a;当AI学会"看图说话" 想象一下这样的场景&#xff1a;电商平台每天需要处理数百万张商品图片&#xff0c;运营团队不得不加班加点编写商品描述&#xff1b…...

Qwen3-14B在Keil5 MDK开发中的奇思妙用:注释生成与调试日志分析

Qwen3-14B在Keil5 MDK开发中的奇思妙用&#xff1a;注释生成与调试日志分析 1. 嵌入式开发的痛点与AI机遇 在STM32项目开发过程中&#xff0c;每个工程师都经历过这样的场景&#xff1a;接手一个遗留项目&#xff0c;面对大段没有注释的汇编代码&#xff1b;或者调试时串口不…...

Qwen3-ASR性能优化:基于CNN的语音特征提取技术

Qwen3-ASR性能优化&#xff1a;基于CNN的语音特征提取技术 语音识别技术发展到今天&#xff0c;已经不再是实验室里的新奇玩具&#xff0c;而是我们日常生活中随处可见的实用工具。从手机语音助手到会议记录软件&#xff0c;从智能家居控制到车载语音交互&#xff0c;语音识别…...

MTools详细步骤:MTools与RAG系统结合——先摘要再检索再生成

MTools详细步骤&#xff1a;MTools与RAG系统结合——先摘要再检索再生成 1. 引言&#xff1a;当“瑞士军刀”遇上“智能图书馆” 想象一下&#xff0c;你面前有一份长达50页的行业报告&#xff0c;你需要快速理解它的核心观点&#xff0c;然后基于这些观点去查找相关的市场数…...

Graphormer多任务预测指南:property-guided与catalyst-adsorption双模式切换详解

Graphormer多任务预测指南&#xff1a;property-guided与catalyst-adsorption双模式切换详解 1. Graphormer模型概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。这个创…...

Chandra效果实测:100轮连续中文对话稳定性与上下文保持能力验证

Chandra效果实测&#xff1a;100轮连续中文对话稳定性与上下文保持能力验证 测试背景说明&#xff1a;本次测试基于CSDN星图平台的Chandra镜像&#xff0c;在标准配置环境下进行100轮连续中文对话&#xff0c;全面评估其长时间运行的稳定性、上下文理解能力和响应表现。 1. 测试…...

LeetCode:726. Number of Atoms - Python

问题描述&#xff1a; 给定一个化学式formula&#xff08;作为字符串&#xff09;&#xff0c;返回每种原子的数量。 原子总是以一个大写字母开始&#xff0c;接着跟随0个或任意个小写字母&#xff0c;表示原子的名字。 如果数量大于 1&#xff0c;原子后会跟着数字表示原子的…...