0

Python で輪郭を検出するために opencv を使用しました。この輪郭を dxf ファイルとして保存するためのコードを検索して以下のように書きました。

cap = EasyPySpin.VideoCapture(0)

_, frame = cap.read()
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
frame = cv2.resize(frame, dsize=(0,0), fx=0.26, fy=0.26, interpolation=cv2.INTER_AREA)
frame_blr = cv2.GaussianBlur(frame, (3, 3), 0)  
canny = cv2.Canny(frame_blr, 255, 0)
contours, hierarchy=cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours_draw = cv2.drawContours(frame, contours, -1, (0, 255, 0), 1)
cv2.imshow('contour', contours_draw)


contours = [np.squeeze (cnt, axis = 1) for cnt in contours]
ctr = contours[1]
dwg = ezdxf.new ('R2010') # create a new DXF R2010 drawing, official DXF version name: 'AC1024'
msp = dwg.modelspace () # add new entities to the model space
dwg.layers.new (name = 'MyLines', dxfattribs = {'color': 3}) # 3 = Green


for i in range (len (ctr)):
    n = i + 1
    if n>= len (ctr):
        n = 0
    msp.add_line (ctr [i], ctr [n], dxfattribs = {'layer': 'MyLines'}) # add a LINE entity
    print (ctr [i], '->', ctr [n])
dwg.saveas ('line.dxf')

しかし、検出された輪郭と dxf ファイルに描かれた線は異なります。また、実行するたびに dxf ファイルにわずかに異なる線が描画されます。理由はわかりません。

等高線画像 >ここに画像の説明を入力 DXF ファイル >ここに画像の説明を入力

そして、このコードの意味がわかりません。

contours = [np.squeeze (cnt, axis = 1) for cnt in contours]
ctr = contours[1]

このコードを削除して crt を等高線に編集すると、次のエラーが発生します。

Traceback (most recent call last):
  File "c:/Users/MyPc/KHS/p40.contour detection, (x,y).py", line 38, in <module>
    msp.add_line (contours [i], contours [n], dxfattribs = {'layer': 'MyLines'}) # add a LINE entity
  File "C:\Users\MyPc\AppData\Local\Programs\Python\Python38\lib\site-packages\ezdxf\graphicsfactory.py", line 121, in add_line
    dxfattribs["start"] = Vec3(start)
  File "src\ezdxf\acc\vector.pyx", line 417, in ezdxf.acc.vector.Vec3.__cinit__
TypeError: invalid argument count
4

1 に答える 1