当前位置: 代码网 > it编程>前端脚本>Python > 使用Python实现将图片转线条图

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

2025年02月18日 Python 我要评论
1、背景介绍有时候我们需要将一张图转为线条图片,这样看起来更加的有意思,我们可以利用python中的一些图片处理的库对图片进行处理,先将图片使用灰度模式读取图片,然后将图片转换成线条图片2、库的安装库

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图片的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com