直線の描画についての質問です。
Pythonで二つのCSVファイルA、B(カンマ区切り)において、
ファイルAの中に格納されている座標からファイルBの中に格納されている
座標の中で最短距離となる座標をそれぞれ抽出しています。
そして、抽出して紐づけした二点の座標すべての線分を描画したいと考えています。
CSVファイルの中身
A
10,1019,546 21,725,403 32,1022,1166 43,993,1353 54,795,915 65,753,1346 76,813,1358 87,433,581 98,255,370 109,109,818 1110,456,1211 1211,227,1031 1312,115,1063
B
1,x,y 20,1077,167 31,852,210 42,769,257 53,662193 64,1078,938 75,959,975 86,902,900 97,874,1157 108,817,1065 119,678,1165 1210,477,312 1311,306,208 1412,105,313 1513,106,550 1614,315,733 1715,510,1035 1816,324,1105 1917,216,1443 2018,112,1384
最短距離を抽出するコード(前回の質問で教えていただいたもの)
Python
1import itertools 2import pandas as pd 3import numpy as np 4 5df_a = pd.read_csv("A.csv", index_col=0) 6df_b = pd.read_csv("B.csv", index_col=0) 7 8# 全ての組み合わせの距離を求める 9df = pd.DataFrame(itertools.product(df_a.index, df_b.index), columns=['A', 'B']) 10df['dist'] = df.apply(lambda d: np.linalg.norm(df_a.loc[d.A] - df_b.loc[d.B]), axis=1) 11# データを縦軸にA、横軸にBをとるように成形 12df = df.pivot(index='A', columns='B', values='dist') 13print(df) 14# 各行(A)ごとに、一番短い距離となる列(B)を算出 15ret = df.idxmin(axis=1) 16print(ret)
出力結果は以下の通りです。
B 0 1 ... 17 18
A ...
0 280.230184 335.305794 ... 1300.405086 1413.224738
1 524.878177 226.094360 ... 1028.568849 1110.059774
2 710.829076 717.342344 ... 1155.066363 1295.451633
3 847.521060 833.175910 ... 1100.167547 1246.493888
4 662.180460 505.506252 ... 899.546735 1021.575510
5 951.238075 815.835704 ... 761.932027 907.196074
6 921.454236 814.339041 ... 845.831319 991.841375
7 955.745150 647.976594 ... 682.592435 727.238039
8 1170.275562 851.656409 ... 761.479826 745.461468
9 1443.644909 1135.496721 ... 468.006019 400.466674
10 1147.117022 903.004142 ... 376.029693 501.268256
11 1348.025590 1057.880531 ... 291.986708 297.795078
12 1500.054410 1204.310814 ... 305.067950 227.104798
[13 rows x 19 columns]
A
0 0
1 2
2 5
3 7
4 8
5 9
6 7
7 14
8 11
9 13
10 15
11 16
12 18
dtype: int64
今回実行したコード
Python
1import cv2 2 3img = cv2.imread('test.jpg') 4 5cv2.line(img, (1019,546),(1077,167),(255,0,0),3,cv2.LINE_4) 6 7cv2.imwrite('test_result.jpg', img)
現時点で手打ちしている座標の部分にCSVファイルA、Bから最短距離として
紐づけした二つの座標データを持ってきてループさせればいいと思うのですが、
方法が思いつかず、調べてもわかりませんでした。
前回の延長のような質問となってしまい申し訳ありません。
回答1件
あなたの回答
tips
プレビュー