画像とCSVファイルの紐づけを行いたい

実現したいこと

フレームレート25の動画を静止画に切り出した画像がファイル名"video_0.img" ~ "video_900.img" のように連番で保存されています。CSVファイルには処理を行った'time','x','y'という名前の秒、x座標、y座標の列に4165ずつ保存されています.フォルダに保存されている画像を取り出し秒数を計算、CSVファイルのtime列から最も近い秒数を取り出し同じ行のx,y列の値を取り出すプログラムを作成したいです。

実行結果はvideo_0.img,time,x,yのように表示して、4列のリストに格納したいです

発生している問題・分からないこと

画像から秒数を求めることができるのですがfor文を用いて最も近いtime列の値と同じ行のx,yを取り出し方がわからないです。for文のところでエラーが出てしまい対処法がよくわからないです

該当のソースコード

python

1import numpy as np 2import pathlib 3import glob 4import csv 5from natsort import natsorted 6from PIL import Image 7 8fps=25#フレームレート9 10def get_nearest_coordinates(image_path):11 nearest_x = None12 nearest_y = None13 min_time_diff = float('inf')14 15 time = df['times']#秒データ16 x = df["x"].astype(int)#x座標17 y = df["y"].astype(int)#y座標18 19 file_name=[]20 img_list = list(pathlib.Path(image_path).glob('**/*.jpg'))#フォルダ内の画像を取得21 img_list=natsorted(img_list)#ファイルの並び替え22 for f in glob.glob(image_path+'/*.jpg'):23 file_name.append(os.path.split(f)[1])#ファイル名のみ取得24 file_name=natsorted(file_name)25 26 #フレームから秒数を求める27 28 frame_duration=1/fps 29 nfame=94030 target_time=[i*frame_duration for i in range(nframe)]#nframeはフォルダ内の画像の全枚数(940枚)31 32 for sec in range(len(["times"])):#time列に格納されている最も近い値を求める33 time_diff = abs(time - target_time)34 min_time_diff=time_diff 35get_nearest_coordinates(画像のパス)

python

1df = pd.read_csv(csv_path)#csvファイルの読み込み2df=df[df['color'].isnull()]#欠損値を含む行を抽出し保存

csv

1 time x y color 20 1.648447 252.185 536.998 NaN 31 1.652499 236.218 546.587 NaN 42 1.656501 233.808 568.770 NaN 574 2.020458 59.985 595.189 NaN 675 2.024459 63.472 601.110 NaN 7... ... ... ... 8 9 100,1,2,75・・・は行数です

試したこと・調べたこと

上記の詳細・結果

ValueError Traceback (most recent call last)

--> 194 return self._arith_method(other, operator.sub)
File /usr/local/lib/python3.8/dist-packages/pandas/core/series.py:6112, in Series._arith_method(self, other, op)
6110 def _arith_method(self, other, op):
6111 self, other = ops.align_method_SERIES(self, other)
...
68 if _TEST_MODE:
69 _store_test_result(False)
---> 70 return op(a, b)
ValueError: operands could not be broadcast together with shapes (4165,) (942,)
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

補足

jupyter notebook
Python 3.8.10
csvファイルのcolor列の値が入っている行は必要ないため除外しています

コメントを投稿

0 コメント