iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python+PyQT5实现手绘图片生成器
  • 617
分享到

怎么用Python+PyQT5实现手绘图片生成器

2023-06-29 04:06:41 617人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“怎么用python+PyQt5实现手绘图片生成器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python+PyQT5实现手绘图片生成器”吧!UI界面的整体部分代码块,U

本篇内容主要讲解“怎么用python+PyQt5实现手绘图片生成器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python+PyQT5实现手绘图片生成器”吧!

怎么用Python+PyQT5实现手绘图片生成器

UI界面的整体部分代码块,UI界面的设计比较简单。效果在上面的图片展示。

class HandImage(QWidget):    def __init__(self):        super(HandImage, self).__init__()        self.init_ui()    def init_ui(self):        '''        UI界面组件及布局        :return:        '''        self.setWindowTitle('手绘图片生成器   公众号:[Python 集中营]')        self.setWindowIcon(QIcon('手绘图标.ico'))        self.setFixedWidth(500)        self.sou_im_path = QLineEdit()        self.sou_im_path.setReadOnly(True)        self.sou_im_path_btn = QPushButton()        self.sou_im_path_btn.setText('源图片')        self.sou_im_path_btn.clicked.connect(self.sou_im_path_btn_clk)        self.dir_path = QLineEdit()        self.dir_path.setReadOnly(True)        self.dir_path_btn = QPushButton()        self.dir_path_btn.setText('存储')        self.dir_path_btn.clicked.connect(self.dir_path_btn_clk)        self.start_btn = QPushButton()        self.start_btn.setText('开始绘制图像')        self.start_btn.clicked.connect(self.start_btn_clk)        grid = QGridLayout()        grid.addWidget(self.sou_im_path, 0, 0, 1, 1)        grid.addWidget(self.sou_im_path_btn, 0, 1, 1, 1)        grid.addWidget(self.dir_path, 1, 0, 1, 1)        grid.addWidget(self.dir_path_btn, 1, 1, 1, 1)        grid.addWidget(self.start_btn, 2, 0, 1, 2)        self.thread_ = WorkThread(self)        self.thread_.finished.connect(self.finished)        self.setLayout(grid)    # UI界面上的槽函数    def sou_im_path_btn_clk(self):        '''        选择源图片并设置路径        :return:        '''        im_path = QFileDialog.getOpenFileName(self, os.getcwd(), '打开图片', 'Image File(*.jpg);;Image File(*.png)')        self.sou_im_path.setText(im_path[0])    def dir_path_btn_clk(self):        '''        选择存储路径并设置路径        :return:        '''        dir_path = QFileDialog.getExistingDirectory(self, os.getcwd(), '选择路径')        self.dir_path.setText(dir_path)    def start_btn_clk(self):        '''        开始按钮绑定的槽函数        :return:        '''        self.start_btn.setEnabled(False)        self.thread_.start()    def finished(self, finished):        '''        用于子线程传递完成信号的槽函数        :param finished: 信号变量        :return:        '''        if finished is True:            self.start_btn.setEnabled(True)

其中绘图用到的第三方库只有两个,主要的还是Pillow图像处理库,还有就是numpy科学计算库用于一些数组计算等的操作。

将第三方的处理库导入到代码块中

from PIL import Image  # 图像处理模块import numpy as np  # 科学计算库# PyQt5界面制作及样式、核心组件from PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtCore import *# 应用基础操作相关import sysimport os

创建用于专门手绘图像的子线程类,将UI界面的处理逻辑和生成图像的处理逻辑分开不至于产生无响应的卡死状态。

class WorkThread(QThread):    finished = pyqtSignal(bool)    def __init__(self, parent=None):        super(WorkThread, self).__init__(parent)        self.parent = parent        self.working = True    def __del__(self):        self.working = False        self.wait()    def run(self):        # 源图片路径        sou_im_path = self.parent.sou_im_path.text().strip()        # 存储路径        dir_path = self.parent.dir_path.text().strip()        if sou_im_path == '' or dir_path == '':            self.finished.emit(True)            return        # 打开需要进行转的图像,并进行参数设置,取出来的参数主要图像的一些梯度值。最后进行数组保存。        vals = np.asarray(Image.open(sou_im_path).convert('L')).astype('float')        '''图像参数处理'''        depth = 12.0  # 设置初始化深度        gray_vals = np.gradient(vals)  # 提取图像灰度的梯度值        gray_x, gray_y = gray_vals  # 单独提取横坐标与纵坐标的灰度值        print('当前横坐标的灰度值:', gray_x)        print('当前纵坐标的灰度值:', gray_y)        # 重新设置横坐标合纵坐标的灰度值        gray_x = gray_x * depth / 100.0        gray_y = gray_y * depth / 100.0        # 根据numpy.sqrt()函数计算横坐标和纵坐标灰度值的平方根        gray_sqrt = np.sqrt(gray_x ** 2 + gray_y ** 2 + 1.0)        # 重新计算X轴、Y轴、Z轴的光源        light_x = gray_x / gray_sqrt        light_y = gray_y / gray_sqrt        light_z = 1.0 / gray_sqrt        # 计算光源的方位角度、俯视角度        agnle_el = np.pi / 2.2  # 俯视角度        agnle_az = np.pi / 4.  # 方位角度        # 分别计算光源对X轴、Y轴、Z轴的影响        dx = np.cos(agnle_el) * np.cos(agnle_az)  # 光源对x 轴的影响        dy = np.cos(agnle_el) * np.sin(agnle_az)  # 光源对y 轴的影响        dz = np.sin(agnle_el)  # 光源对z 轴的影响        # 设置光源归一化处理        light = 255 * (dx * light_x + dy * light_y + dz * light_z)        light = light.clip(0, 255)        # 重新构建图像        image = Image.fromarray(light.astype('uint8'))        image.save(dir_path + '/手绘图像.jpg')        self.finished.emit(True)        print('手绘图像绘制完成!')

主要代码块实现都在上面了,下面将展示完整的代码

完整代码

# -*- coding:utf-8 -*-# @author Python 集中营# @date 2022/2/10# @file test2.py# done# 手绘图片生成器:以雪容融为例一键生成...# 手绘图片生成器可以将导入的彩色图片通过python分析光源、灰度等操作生成手绘图片。# 其中绘图用到的第三方库只有两个,主要的还是Pillow图像处理库,还有就是numpy科学计算库用于一些数组计算等的操作。# 将第三方的处理库导入到代码块中from PIL import Image  # 图像处理模块import numpy as np  # 科学计算库# PyQt5界面制作及样式、核心组件from PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtCore import *# 应用基础操作相关import sysimport os# 创建用于专门手绘图像的子线程类,将UI界面的处理逻辑和生成图像的处理逻辑分开不至于产生无响应的卡死状态。class WorkThread(QThread):    finished = pyqtSignal(bool)    def __init__(self, parent=None):        super(WorkThread, self).__init__(parent)        self.parent = parent        self.working = True    def __del__(self):        self.working = False        self.wait()    def run(self):        # 源图片路径        sou_im_path = self.parent.sou_im_path.text().strip()        # 存储路径        dir_path = self.parent.dir_path.text().strip()        if sou_im_path == '' or dir_path == '':            self.finished.emit(True)            return        # 打开需要进行转的图像,并进行参数设置,取出来的参数主要图像的一些梯度值。最后进行数组保存。        vals = np.asarray(Image.open(sou_im_path).convert('L')).astype('float')        '''图像参数处理'''        depth = 12.0  # 设置初始化深度        gray_vals = np.gradient(vals)  # 提取图像灰度的梯度值        gray_x, gray_y = gray_vals  # 单独提取横坐标与纵坐标的灰度值        print('当前横坐标的灰度值:', gray_x)        print('当前纵坐标的灰度值:', gray_y)        # 重新设置横坐标合纵坐标的灰度值        gray_x = gray_x * depth / 100.0        gray_y = gray_y * depth / 100.0        # 根据numpy.sqrt()函数计算横坐标和纵坐标灰度值的平方根        gray_sqrt = np.sqrt(gray_x ** 2 + gray_y ** 2 + 1.0)        # 重新计算X轴、Y轴、Z轴的光源        light_x = gray_x / gray_sqrt        light_y = gray_y / gray_sqrt        light_z = 1.0 / gray_sqrt        # 计算光源的方位角度、俯视角度        agnle_el = np.pi / 2.2  # 俯视角度        agnle_az = np.pi / 4.  # 方位角度        # 分别计算光源对X轴、Y轴、Z轴的影响        dx = np.cos(agnle_el) * np.cos(agnle_az)  # 光源对x 轴的影响        dy = np.cos(agnle_el) * np.sin(agnle_az)  # 光源对y 轴的影响        dz = np.sin(agnle_el)  # 光源对z 轴的影响        # 设置光源归一化处理        light = 255 * (dx * light_x + dy * light_y + dz * light_z)        light = light.clip(0, 255)        # 重新构建图像        image = Image.fromarray(light.astype('uint8'))        image.save(dir_path + '/手绘图像.jpg')        self.finished.emit(True)        print('手绘图像绘制完成!')# UI界面的整体部分代码块,UI界面的设计比较简单。效果在下面的图片展示。class HandImage(QWidget):    def __init__(self):        super(HandImage, self).__init__()        self.init_ui()    def init_ui(self):        '''        UI界面组件及布局        :return:        '''        self.setWindowTitle('手绘图片生成器   公众号:[Python 集中营]')        self.setWindowIcon(QIcon('手绘图标.ico'))        self.setFixedWidth(500)        self.sou_im_path = QLineEdit()        self.sou_im_path.setReadOnly(True)        self.sou_im_path_btn = QPushButton()        self.sou_im_path_btn.setText('源图片')        self.sou_im_path_btn.clicked.connect(self.sou_im_path_btn_clk)        self.dir_path = QLineEdit()        self.dir_path.setReadOnly(True)        self.dir_path_btn = QPushButton()        self.dir_path_btn.setText('存储')        self.dir_path_btn.clicked.connect(self.dir_path_btn_clk)        self.start_btn = QPushButton()        self.start_btn.setText('开始绘制图像')        self.start_btn.clicked.connect(self.start_btn_clk)        grid = QGridLayout()        grid.addWidget(self.sou_im_path, 0, 0, 1, 1)        grid.addWidget(self.sou_im_path_btn, 0, 1, 1, 1)        grid.addWidget(self.dir_path, 1, 0, 1, 1)        grid.addWidget(self.dir_path_btn, 1, 1, 1, 1)        grid.addWidget(self.start_btn, 2, 0, 1, 2)        self.thread_ = WorkThread(self)        self.thread_.finished.connect(self.finished)        self.setLayout(grid)    # UI界面上的槽函数    def sou_im_path_btn_clk(self):        '''        选择源图片并设置路径        :return:        '''        im_path = QFileDialog.getOpenFileName(self, os.getcwd(), '打开图片', 'Image File(*.jpg);;Image File(*.png)')        self.sou_im_path.setText(im_path[0])    def dir_path_btn_clk(self):        '''        选择存储路径并设置路径        :return:        '''        dir_path = QFileDialog.getExistingDirectory(self, os.getcwd(), '选择路径')        self.dir_path.setText(dir_path)    def start_btn_clk(self):        '''        开始按钮绑定的槽函数        :return:        '''        self.start_btn.setEnabled(False)        self.thread_.start()    def finished(self, finished):        '''        用于子线程传递完成信号的槽函数        :param finished: 信号变量        :return:        '''        if finished is True:            self.start_btn.setEnabled(True)if __name__ == '__main__':    app = QApplication(sys.argv)    main = HandImage()    main.show()    sys.exit(app.exec_())

到此,相信大家对“怎么用Python+PyQT5实现手绘图片生成器”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么用Python+PyQT5实现手绘图片生成器

本文链接: https://www.lsjlt.com/news/322584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Python+PyQT5实现手绘图片生成器
    本篇内容主要讲解“怎么用Python+PyQT5实现手绘图片生成器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python+PyQT5实现手绘图片生成器”吧!UI界面的整体部分代码块,U...
    99+
    2023-06-29
  • Python+PyQT5实现手绘图片生成器
    手绘图片生成器可以将导入的彩色图片通过python分析光源、灰度等操作生成手绘图片。 UI界面的整体部分代码块,UI界面的设计比较简单。效果在上面的图片展示。 class Hand...
    99+
    2024-04-02
  • 怎么用Python实现随机生成图片验证码
    本篇内容主要讲解“怎么用Python实现随机生成图片验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现随机生成图片验证码”吧!导入模块import random...
    99+
    2023-06-26
  • Python怎么生成表格图片
    本篇内容介绍了“Python怎么生成表格图片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!pytab首先安装pip install...
    99+
    2023-06-29
  • PHP中怎么实现生成图片水印
    PHP中怎么实现生成图片水印,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。文本水印我们使用函数watermark_text()来生成文本水印,你必须先指定字体源文件、字体大...
    99+
    2023-06-17
  • Java怎么实现自动生成缩略图片
    这篇文章主要介绍“Java怎么实现自动生成缩略图片”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java怎么实现自动生成缩略图片”文章能帮助大家解决问题。一、自动生成缩略图方法:package&nb...
    99+
    2023-06-30
  • python怎么将图片生成视频MP4
    本篇内容主要讲解“python怎么将图片生成视频MP4”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么将图片生成视频MP4”吧!python图片生成视频MP4import ...
    99+
    2023-07-05
  • Python怎么实现视频分解成图片及图片合成视频
    这篇文章主要介绍了Python怎么实现视频分解成图片及图片合成视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现视频分解成图片及图片合成视频文章都会有所收获,下面我们一起来看看吧。一、pyt...
    99+
    2023-06-29
  • java怎么实现随机验证码图片生成
    这篇文章主要介绍“java怎么实现随机验证码图片生成”,在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现随机验证码图片生成”的疑惑有所...
    99+
    2023-06-25
  • 怎么使用PyQt5制作一个数据图表生成器
    这篇文章主要介绍了怎么使用PyQt5制作一个数据图表生成器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我的需求:手动配置X轴、Y轴、图表标题等参数自动通过Pyecharts...
    99+
    2023-06-29
  • Python实现随机生成图片验证码详解
    使用python生成一个图片验证码,随机的,可以由于验证人机和别的啊,很方便很简单 导入模块 import random from PIL import Image,ImageFon...
    99+
    2024-04-02
  • C#怎么实现将网址生成二维码图片
    这篇文章主要介绍“C#怎么实现将网址生成二维码图片”,在日常操作中,相信很多人在C#怎么实现将网址生成二维码图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么实现将网址生成二维码图片”的疑惑有所帮助!...
    99+
    2023-06-30
  • python数学建模之怎么使用Matplotlib实现图片绘制
    本篇内容介绍了“python数学建模之怎么使用Matplotlib实现图片绘制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Matplotl...
    99+
    2023-07-02
  • Python实现提取图片中颜色并绘制成可视化图表
    目录导入模块并加载图片提取颜色并整合成表格绘制图表实战环节今天小编来为大家分享一个有趣的可视化技巧,如何从图片中提取颜色然后绘制成可视化图表,如下图所示 在示例照片当中有着各种各样...
    99+
    2024-04-02
  • 怎么在python中切片生成器
    今天就跟大家聊聊有关怎么在python中切片生成器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是...
    99+
    2023-06-14
  • Python中的生成器怎么实现
    本篇内容主要讲解“Python中的生成器怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的生成器怎么实现”吧!前言生成器很容易实现,但却不容易理解。生成器也可用于创建迭代器,...
    99+
    2023-06-29
  • Python+SeaTable实现生成条形码图片并写入表格
    目录在 SeaTable 中用 Python 生成条形码新建 Python 脚本写入代码运行脚本设置条码参考应用场景打印条形码用于粘贴答题卡设计准考证页面用于识别信息总结不管是录入信...
    99+
    2024-04-02
  • python怎么用matplotlib生成图表
    要使用 matplotlib 在 python 中生成图表,请遵循以下步骤:安装 matplotlib 库。导入 matplotlib 并使用 plt.plot() 函数生成图表。自定义...
    99+
    2024-05-05
    python 可视化数据 排列
  • C#实现封面图片生成器的示例代码
    目录实现功能开发环境实现代码实现效果这个东西我已经用了有段时间了,从开始写文章就在用这个,主要原因还是因为我比较懒。懒得去寻找图片,同时又怕万一惹来版权争议。。。 跟我所有的文章的...
    99+
    2024-04-02
  • python词云图片生成不出来怎么解决
    生成词云图片的过程中出现问题,可能是由于以下几个原因导致的: 缺少必要的库:确保已经正确安装了`wordcloud`库及其依赖库...
    99+
    2023-10-26
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作