python---图片转dxf类型

这篇文章介绍了如何使用Python和OpenCV库将图片转换为DWF(AutoCAD设计交换格式)的轮廓,包括图像预处理(二值化、高斯模糊和Canny边缘检测),并通过ezdxf库进行描边。注意原始图片质量影响最终DWF的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python—图片转dxf类型(目前只能画出轮廓)

gitee地址

https://gitee.com/dobest-li/python—convert-image-to-dxf

下载包注意

如果pip时出现socket.timeout:The read operation timed out 
一般是下载过慢,超出默认时间,修改响应时间即可。
windows:   pip --default-timeout=100 install xxx
linux:     pip --default-timeout=100 install -U xxx

大概思路:

  • 获取图片,实现二值化,然后再利用使用高斯模糊来减少噪声,再利用canny获取轮廓,使用ezdxf进行描边。

注意:

  • 因为是二值化图,所以不能使用彩色图,用示例中那种
  • 这个只能辅助画图,有些软件是可以直接进行导出导入,远远比代码中更为精细
  • 图片越清晰,放大之后不是断断续续的黑点,那么对其生成的dxf也会越精细,虽然只有轮廓
  • 对于圆形,如果用霍夫圆去检测,有时候检测出多个圆,所以没有放到下边代码中,现在所展示的圆是通过线段的方式去描出(可以考虑)

代码实现:

import cv2
import numpy as np
import ezdxf


def image_to_dxf(image_path, dxf_path):

    # 读取图像
    image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

    #图像反转
    flipped_image = cv2.flip(image, -1)
    flipped_image2 = cv2.flip(flipped_image, 1)

    if image is None:
        raise ValueError("无法读取图像文件")

    # image[image < 50] = 0

    blurred = cv2.GaussianBlur(flipped_image2, (3, 3), 0)
    # 使用阈值处理来二值化图像(如果需要进一步处理)
    _, thresholded = cv2.threshold(blurred, 211, 255, cv2.THRESH_BINARY)

    # 使用Canny边缘检测算法提取边缘
    edges = cv2.Canny(thresholded, 3, 20,apertureSize=7,L2gradient=True)

    # 找到轮廓

    # 简单找到轮廓点 这个文件相对小
    # contours, _ = cv2.findContours(edges, cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE)

    # cv2.CHAIN_APPROX_NONE找到所有轮廓点  这个文件相对较大
    contours, _ = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
    # 创建新的DXF文档
    doc = ezdxf.new()
    msp = doc.modelspace()

    # 遍历轮廓并添加到DXF文件中
    for contour in contours:
        # 将轮廓的ndarray转换为列表的列表(每个子列表是一个(x, y)坐标对)
        points = contour.reshape(-1, 2).tolist()
        msp.add_polyline2d(points)

        # 保存DXF文件
    doc.saveas(dxf_path)


# 调用函数
#jpg png 都可以
image_to_dxf('templates\\test.png', 'output.dxf')

代码实现的效果

原先图片
在这里插入图片描述
使用代码之后的dxf文件:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值