[画像の中に描かれた曲線の座標値を読み取り、テキストデータとして、ファイルに書き込む]のためのクラス, Python(パイソン) 使って作ってみた ,ソースプログラムリスト あり

Python(パイソン) プログラム作ってみた インデックス へ

-----

2024.8.28 presented in [note] ( //note.com/runningWater/ )

----------
1 はじめに

これ以降に記述されている内容は、このようなコンピューター・プログラムを制作した、というような事を、ただ、述べているに過ぎない。

以下の記述を読んだ人が、それを単に参考にする、というのであれば、問題は無いと、思われる。

しかし、記述されている内容に沿って、その人が、そこに記されているのと同様の制作や作業を行った際に、その制作、作業、コンピューターの作動の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くない。

その制作、作業、コンピューターの作動の結果、その人や、その人が所属している組織、その人が使用した様々な機器、インフラストラクチャー等の、身の上にどのような事が起ころうとも、私は一切、責任を負わない。

このプログラムは、Python(パイソン) 言語を使って、記述されている。

----------
2 どんなものを作ったのか

画像の中に描かれた曲線の、X座標、Y座標 の値を、読み取り、それを、テキストデータとして、ファイルに書き込む、というようなものを、作ってみた。

X座標値が異なる複数個所が、同じY座標値を持つ、というような曲線(下図のような)に対しては、このモジュールは、適用できない。

Fig 1

例えば、下図のような曲線が描かれている画像に対して、このモジュールを適用すると、下記のようなテキストデータが、ファイルに書き込まれる。赤色の部分が、処理対象となる曲線であると、認識されて、処理される。

Fig 2

=====
テキストデータ

項目の間には、"," が挿入されるような形となっている。各項目の意味は、左から順に、

曲線が定義されている("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

#-----------------------------

----------

Python(パイソン) プログラム作ってみた インデックス へ

この記事が気に入ったらサポートをしてみませんか?