使用Python实现将图片转线条图

 更新时间:2025年02月18日 16:09:56   作者:一晌小贪欢  
这篇文章主要为大家详细介绍了如何使用Python实现将图片转线条图,可以让图片看起来更加的有意思,感兴趣的小伙伴可以跟随小编一起学习一下

1、背景介绍

有时候我们需要将一张图转为线条图片,这样看起来更加的有意思,我们可以利用python中的一些图片处理的库对图片进行处理,先将图片使用灰度模式读取图片,然后将图片转换成线条图片

2、库的安装

用途安装
PyQt5界面设计pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
opencv-python视频处理pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/
matplotlib图片处理pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/
os获取路径内置库无需安装

3、完整代码

注意事项,以下请用相对路径

image = cv2.imread('aaa.png', cv2.IMREAD_GRAYSCALE)

import cv2
import matplotlib.pyplot as plt

# 读取图片,使用灰度模式读取图片
image = cv2.imread('aaa.png', cv2.IMREAD_GRAYSCALE)

# 使用Canny边缘检测算法进行边缘提取,threshold1和threshold2是边缘检测的阈值
edges = cv2.Canny(image, threshold1=100, threshold2=200)

# 创建一个图形窗口,设置显示图像的大小
plt.figure(figsize=(10, 5))

# 显示原始灰度图像
plt.subplot(1, 2, 1)  # 将显示区域分为1行2列,当前显示第一列
plt.title('Original Image')  # 给当前图像设置标题
plt.imshow(image, cmap='gray')  # 显示图片,使用灰度色图

# 显示经过Canny算法处理后的边缘图像
plt.subplot(1, 2, 2)  # 当前显示第二列
plt.title('Edges')  # 给边缘图像设置标题
plt.imshow(edges, cmap='gray')  # 显示边缘检测结果,使用灰度色图

# 显示所有图像
plt.show()

# 将边缘检测的结果保存为图片
cv2.imwrite('edges_output.jpg', edges)

5、完整代码(GUI版本)

注意事项,以下请用相对路径

import sys
import cv2
import os
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QFileDialog, QMessageBox
from PyQt5.QtCore import Qt


class ImageProcessor(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('批量图像边缘检测')
        self.setGeometry(900, 500, 400, 200)

        layout = QVBoxLayout()

        self.label = QLabel('选择图片进行批量边缘检测', self)
        self.label.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.label)

        self.btn_select = QPushButton('选择图片', self)
        self.btn_select.clicked.connect(self.select_images)
        layout.addWidget(self.btn_select)

        self.btn_process = QPushButton('处理并保存', self)
        self.btn_process.clicked.connect(self.process_images)
        layout.addWidget(self.btn_process)

        self.setLayout(layout)

    def select_images(self):
        # 选择多个图片文件
        options = QFileDialog.Options()
        self.filenames, _ = QFileDialog.getOpenFileNames(self, "选择图片文件", "",
                                                         "Images (*.png *.jpg *.bmp);;All Files (*)", options=options)
        if self.filenames:
            # 获取当前工作目录或自定义目录作为基准目录
            base_dir = os.getcwd()  # 或者指定一个路径,例如 r"C:\Users\小庄的Y9000P\Desktop"

            # 将绝对路径转换为相对路径
            self.filenames = [os.path.relpath(filename, base_dir) for filename in self.filenames]

            self.label.setText(f'已选择 {len(self.filenames)} 张图片')

    def process_images(self):
        if not self.filenames:
            QMessageBox.warning(self, '警告', '请先选择图片文件')
            return

        for filename in self.filenames:
            try:
                print(f"正在处理文件: {filename}")  # 添加调试信息
                # 读取图片,使用灰度模式读取图片
                image = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)

                if image is None:
                    print(f"无法读取文件: {filename}")  # 添加调试信息
                    raise Exception(f"无法读取文件: {filename}")

                # 使用Canny边缘检测算法进行边缘提取
                edges = cv2.Canny(image, threshold1=100, threshold2=200)

                # 保存边缘检测结果
                output_filename = filename.rsplit('.', 1)[0] + '_edges.jpg'
                cv2.imwrite(output_filename, edges)

            except Exception as e:
                QMessageBox.warning(self, '错误', f'处理文件 {filename} 时出错: {str(e)}')
                continue

        QMessageBox.information(self, '完成', '所有图片处理完成并已保存')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ImageProcessor()
    ex.show()
    sys.exit(app.exec_())

效果图

以上就是使用Python实现将图片转线条图的详细内容,更多关于Python图片的资料请关注脚本之家其它相关文章!

相关文章

  • TensorFlow实现简单的CNN的方法

    TensorFlow实现简单的CNN的方法

    这篇文章主要介绍了TensorFlow实现简单的CNN的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python中返回函数的完全指南

    Python中返回函数的完全指南

    在Python编程中,函数不仅可以执行操作,还可以作为返回值,这种特性为编程带来了极大的灵活性和强大的表达能力,本文将全面介绍Python中的返回函数,从基础概念到高级应用场景,帮助开发者掌握这一重要特性,需要的朋友可以参考下
    2025-05-05
  • python的pywebview库结合Flask和waitress开发桌面应用程序完整代码

    python的pywebview库结合Flask和waitress开发桌面应用程序完整代码

    pywebview是轻量级Python库,用于创建跨平台桌面应用,结合HTML/CSS/JS界面与Python交互,支持Windows/macOS/Linux,资源占用低,可与Flask、Waitress集成,便于开发、部署,本文给大家介绍python的pywebview库结合Flask和waitress开发桌面应用程序简介,感兴趣的朋友一起看看吧
    2025-07-07
  • pandas数据分列实现分割符号&固定宽度

    pandas数据分列实现分割符号&固定宽度

    数据分列在数据处理中很常见,数据分列一般指的都是字符串分割,本文主要介绍了pandas数据分列实现分割符号&固定宽度,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Python实现导出数据生成excel报表的方法示例

    Python实现导出数据生成excel报表的方法示例

    这篇文章主要介绍了Python实现导出数据生成excel报表的方法,结合完整实例形式分析了Python连接、查询mysql数据库并导出Excel报表的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • 解决django后台样式丢失,css资源加载失败的问题

    解决django后台样式丢失,css资源加载失败的问题

    今天小编就为大家分享一篇解决django后台样式丢失,css资源加载失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 浅析Python的Django框架中的Memcached

    浅析Python的Django框架中的Memcached

    这篇文章主要介绍了浅析Python的Django框架中的缓存机制,其中着重讲到了Memcached,需要的朋友可以参考下
    2015-07-07
  • Python脚本实现统计与可视化COCO数据集标注信息

    Python脚本实现统计与可视化COCO数据集标注信息

    COCO(Common Objects in Context)是目前计算机视觉领域最流行的数据集之一,下面我们就来看看如何使用Python脚本实现统计与可视化COCO数据集标注信息吧
    2026-03-03
  • python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例

    python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例,需要的朋友可以参考下
    2020-02-02
  • 30 个 Python 函数,加速数据分析处理速度

    30 个 Python 函数,加速数据分析处理速度

    这篇文章主要介绍了30 个 Python 函数,加速数据分析处理速度,Pandas 是 Python 中最广泛使用的数据分析和操作库。它提供了许多功能和方法,可以加快数据分析和预处理步骤,下面我们就一起来看看这些方法吧,需要的小伙伴可以参考一下,希望给你带来帮助
    2021-12-12

最新评论