[画像の中に描かれた曲線の座標値を読み取り、テキストデータとして、ファイルに書き込む]のためのクラス, Python(パイソン) 使って作ってみた ,ソースプログラムリスト あり
Python(パイソン) プログラム作ってみた インデックス へ
-----
2024.8.28 presented in [note] ( //note.com/runningWater/ )
----------
1 はじめに
これ以降に記述されている内容は、このようなコンピューター・プログラムを制作した、というような事を、ただ、述べているに過ぎない。
以下の記述を読んだ人が、それを単に参考にする、というのであれば、問題は無いと、思われる。
しかし、記述されている内容に沿って、その人が、そこに記されているのと同様の制作や作業を行った際に、その制作、作業、コンピューターの作動の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くない。
その制作、作業、コンピューターの作動の結果、その人や、その人が所属している組織、その人が使用した様々な機器、インフラストラクチャー等の、身の上にどのような事が起ころうとも、私は一切、責任を負わない。
このプログラムは、Python(パイソン) 言語を使って、記述されている。
----------
2 どんなものを作ったのか
画像の中に描かれた曲線の、X座標、Y座標 の値を、読み取り、それを、テキストデータとして、ファイルに書き込む、というようなものを、作ってみた。
X座標値が異なる複数個所が、同じY座標値を持つ、というような曲線(下図のような)に対しては、このモジュールは、適用できない。
例えば、下図のような曲線が描かれている画像に対して、このモジュールを適用すると、下記のようなテキストデータが、ファイルに書き込まれる。赤色の部分が、処理対象となる曲線であると、認識されて、処理される。
=====
テキストデータ
項目の間には、"," が挿入されるような形となっている。各項目の意味は、左から順に、
曲線が定義されている("Y")か、否か("N")か
検出した曲線の点の、X座標値
検出した曲線の点の、Y座標値
その点が、画像の左端から、右方向に見て、どれくらいの割合の位置にあるか
その点が、画像の下端から、上方向に見て、どれくらいの割合の位置にあるか
と、なっている。
----------------
Y,497,0,0.994,0.0
Y,497,1,0.994,0.002
Y,493,2,0.986,0.004
Y,492,3,0.984,0.006
Y,491,4,0.982,0.008
----------
3 プログラムの内容
このモジュールは、必要に応じて、下記に解説されているモジュールを、使用している。
[テキストデータ を処理する] ためのクラス, Python(パイソン) 使って作ってみた ,ソースプログラムリスト あり
Python(パイソン) ,OpenCV2 ,ソースプログラムリスト あり ,プログラム作ってみた ,[画像処理, OpenCV2 使用] を 行う
下記のモジュールは、上記のモジュールに、使用されている。
Python(パイソン) ,ソースプログラムリスト あり ,プログラム作ってみた ,[エラー処理] を 行う
作ったプログラムは、以下のとおり。
===============
ファイル名 [ DetectCurveInImageData.py ]
----------
#=============================
# DetectCurveInImageData
# detect Curve in ImageData
# , and make text file of cordinates of the Curve
#=============================
import ImageDataTwoDimensionHandling
import TextFileHandling
MODULE_NAME = "DetectCurveInImageData"
#------------------------------------------------------------
def detect_Curve_in_ImageData ( \
arg_abs_path_of_ImageData
, arg_abs_path_of_TextData
) :
function_name = "detect_Curve_in_ImageData"
print ( "==================================" )
print ( "Enter into , Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "arg_abs_path_of_ImageData = " \
+ arg_abs_path_of_ImageData )
print ( "arg_abs_path_of_TextData_ = " \
+ arg_abs_path_of_TextData )
print ( "==================================" )
ins_ImageDataTwoDimensionHandling = \
ImageDataTwoDimensionHandling \
.ImageDataTwoDimensionHandling ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
)
ins_ImageDataTwoDimensionHandling \
.load_image_data ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
, arg_abs_path_of_ImageData
)
width_of_ImageData = \
ins_ImageDataTwoDimensionHandling \
.get_width_of_ImageData ( )
height_of_ImageData = \
ins_ImageDataTwoDimensionHandling \
.get_height_of_ImageData ( )
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "arg_abs_path_of_ImageData = " \
+ arg_abs_path_of_ImageData )
print ( "width_of_ImageData = " , width_of_ImageData )
print ( "height_of_ImageData = " , height_of_ImageData )
print ( "==================================" )
# --------------------------------
ins_TextFileHandling_1 = \
TextFileHandling \
.TextFileHandling ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
, arg_abs_path_of_TextData
# arg_character_used_for_delimiter
, ","
)
ins_TextFileHandling_1 \
.do_open_process_output_mode ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
)
# ---------------------------------
result_of_detect = [ " " , 0 , 0 , 0.0 , 0.0 ]
for get_location_y \
in range ( height_of_ImageData ) :
result_of_detect = detect_for_one_y ( \
get_location_y
, ins_ImageDataTwoDimensionHandling
, width_of_ImageData
, height_of_ImageData
)
ins_TextFileHandling_1 \
.do_write_one_line_process ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
, result_of_detect # arg_list_values_for_output_one_line
)
# -------------------------------------
ins_TextFileHandling_1 \
.do_close_process ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
)
print ( "==================================" )
print ( "Exit from into , Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
#------------------------------------------------
def detect_for_one_y ( arg_get_location_y \
, arg_ins_ImageDataTwoDimensionHandling
, arg_width_of_ImageData
, arg_height_of_ImageData
) :
function_name = "detect_for_one_y"
#--------------------
return_list = [ "N" , -999 , arg_get_location_y , 0.0 , 0.0 ]
get_location_x = 0
process_continue = "Y"
while ( process_continue == "Y" ) :
if ( get_location_x >= arg_width_of_ImageData ) :
# pixel of Curve was not found
process_continue = "N"
return return_list
#-----------------------
color_value = \
arg_ins_ImageDataTwoDimensionHandling \
.get_data_of_one_pixel ( \
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, get_location_x # arg_x_on_ImageData_space
, arg_get_location_y
)
if ( ( color_value [ 2 ] > 200 ) \
and \
( color_value [ 0 ] < 200 ) \
and \
( color_value [ 1 ] < 200 ) \
) :
# color Red , found pixel of Curve
return_list [ 0 ] = "Y"
return_list [ 1 ] = get_location_x
return_list [ 3 ] = \
float ( return_list [ 1 ] ) / \
float ( arg_width_of_ImageData)
return_list [ 4 ] = \
float ( return_list [ 2 ] ) / \
float ( arg_height_of_ImageData)
return return_list
get_location_x += 1
#-----------------------------
----------