在Autodesk DX中的形状匹配

2024-06-28 12:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个绘图(在dxf格式)包含9个不同的形状排列在一个随机的模式。我需要找到每个形状的中心点,导出它的x,y坐标,这样我就可以把它附加到一个列表中,以便进行加工。在

问题是我使用的是autocad,它将每个形状保存为一系列顶点,即使我第一次将它们转换为不同的合并多段线。换句话说,在文本编辑器中打开图形只会给我一个标准的顶点列表,从中不可能说出一个形状的结束和下一个形状的开始。在

到目前为止,我唯一成功的解决方案似乎都是非常成功的。例如,我可以将dxf导出为bmp,然后使用python和Opencv根据它包含的轮廓数来识别每个形状:

import sys

import numpy as np
import cv2

im = cv2.imread('drawing.bmp')
im3 = im.copy()

gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(5,5),0)
thresh = cv2.adaptiveThreshold(blur,255,1,1,11,2)

contours0, hierarchy = cv2.findContours( thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = [cv2.approxPolyDP(cnt, 4, True) for cnt in contours0]
samples =  np.empty((0,100))
responses = []
keys = [i for i in range(30,90)]

for cnt in contours:
    tot = cv2.contourArea(cnt)
    [x,y,w,h] = cv2.boundingRect(cnt)

    if tot in range(1200,1250):
        cv2.putText(im,"shape 3",(x+(w/2),y+(h/2)),0,1,(0,255,0))

cv2.imshow('norm',im)
key = cv2.waitKey(0) 

然后我可以根据需要调整输出,并列出x,y。但是这非常耗时,最终可能会失去太多的精度,无法使用(像素不是浮动的)。在

必须有某种方法可以通过读取dxf来找到这些形状,否则autocad无法渲染它们,我只能得到一个点云。在

那么它到底是怎么知道的,这样我就可以告诉python,在把dxf作为文本文件读取时,应该查找什么来标识一个不同的形状呢?在


Tags: inimport列表dxffornpcv2形状