Сопоставление форм в Autodesk DXF

У меня есть рисунок (в формате 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 в виде текстового файла?

0 ответов

Другие вопросы по тегам