境界値を返す Python

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()

コメント

タイトルとURLをコピーしました