1次元配列の折れ線グラフにおいて境界を返すには、次のような記述にするとよい。
・図を読み込む
・特定の1次元のリストを抽出する
・境界値となるx値を返す
・グラフで表示
・CSVに書き出す
以上のことを実行するコードを書きます。ご自由にお使いください。
import numpy as np
import cv2
import csv
import matplotlib.pyplot as plt
#境界値のx座標を返す関数
def y_to_x(img1_line,th):
maxval=max(img1_line)
minval=min(img1_line)
bo_val=(maxval-minval)*th+minval
ans=[]
for i in range(len(img1_line)-1):
if ((img1_line[i]-bo_val)*(img1_line[i+1]-bo_val)<=0):
ans.append(((bo_val-img1_line[i])/(img1_line[i+1]-img1_line[i])+i))
print(ans)
return ans
#ファイル読み込み
img1 = cv2.imread('c:/Users/MinO/Desktop/python_home/test/a01.tif')
cv2.imshow('1img1',img1)
cv2.waitKey(0)
print(img1.shape)
#特定のラインを吸い出す
img1_line=[]
img1_line=img1[120,20:170,0]
#x座標を表示する関数を呼びだす
th=0.5
ans1=y_to_x(img1_line,th)
#プロットするデータ
import matplotlib.pyplot as plt
plt.plot(img1_line)
plt.show()
#CSV書き込み
with open('c:/Users/MinO/Desktop/python_home/sample.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(['filename', ans1])
cv2.waitKey(0)
cv2.destroyAllWindows()

コメント