質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4337閲覧

pythonで画像を二値化し面積と周囲長を学習させるプログラムを作っています。

next_aaa

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/09 06:58

編集2017/12/09 07:55

###前提・実現したいこと
pythonで画像を二値化し面積と周囲長を学習させるプログラムを作っています。
1つの画像を二値化し面積を求めることができたのですが数百枚ある画像を二値化し、面積、周囲長を求め、学習させるプログラムはどうつくればいいでしょうか。

###該当のソースコード python3.6

【二値化】 def main(): # 閾値 t = 127 # 入力画像の読み込み img = cv2.imread("img.png") # グレースケール変換 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 方法2 (OpenCVで実装) ret, th2 = cv2.threshold(gray, t, 255, cv2.THRESH_BINARY) # 結果を出力 cv2.imwrite("th2.jpg", th2) if __name__ == "__main__": main() 【面積】 img = np.array(Image.open('TC001.png').convert("1"))

###補足情報(言語/FW/ツール等のバージョンなど)
python3.6
画像はパソコン内のC:\Users\LSL\定義した文字領域に入っていて、TC001.png、TC002.png、TC003.png・・・のように名前をつけてました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2017/12/09 07:03

学習させるというのはどういうことでしょうか。
next_aaa

2017/12/09 07:05

黒い部分の面積や周囲長を学習させ文字領域を特定するプログラムを作りたいと考えております。
guest

回答2

0

「学習」の内容がわかりませんけど、たくさんあるファイルに対応する形に発展させたいという点に関しては、ざっくり以下のような感じでしょうか。
0. def mainの中でファイル名を決め打ちしているので、これを関数呼び出し時のパラメータから読み取るように変更する。関数名もmainからもうすこし説明的なものに変える(imageanalyzeとか何とか)。
0. 注目ディレクトリの中のファイルを列挙しそのファイル名それぞれを引数として上記関数を呼び出すようなforループを作成する。

投稿2017/12/09 07:47

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

next_aaa

2017/12/09 07:52

KojiDoiさん、ありがとうございます。 その通りです。1枚の画像を二値化することはできましたが、for文などを使って数百枚ある画像を二値化し、黒い部分の面積、周囲長を求め、そこから文字領域を特定させるようなプログラムを作りたいです。
KojiDoi

2017/12/09 07:54

そこまでわかっているのなら、まずはマニュアルを見てforループを実際に書いてみてください。書いてみてどこか引っかかったなら、引っかかったところを具体的に説明してください。
next_aaa

2017/12/09 07:59

for i in range(1, 10): print(f'file name/img{i}.png') 1から9まで表示できますがここから二値化や面積、周囲長の部分も応用したいと思いました。
guest

0

ベストアンサー

以下のようなプログラムのことでしょうか。

python

1def 文字領域を得る関数(画像): 2 何かしらの形で与える 3 return 領域 4 5def 面積・周囲長を得る関数(画像): 6 二値化 7 面積求める 8 周囲長求める 9 return 面積, 周囲長 10 11X = [] 12Y = [] 13for 画像 in フォルダ: 14 領域 = 文字領域を得る関数(画像) 15 面積, 周囲長 = 面積・周囲長を得る関数(画像) 16 X.append([面積, 周囲長]) 17 Y.append(領域) 18 19モデル = 判定用のモデル 20モデル.fit(X, Y) 21 22S, L = 面積・周囲長を得る関数(新しい画像) 23新しい画像の文字領域 = モデル.predict([S, L])

投稿2017/12/09 07:46

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

next_aaa

2017/12/09 07:55

mkgreiさん、ありがとうございます。 1枚の画像を二値化することはできましたが、for文などを使って数百枚ある画像を二値化し、黒い部分の面積、周囲長を求め、そこから文字領域を特定させるようなプログラムを作りたいです。forで繰り返しやすいように名前をTC001.png、TC002.png、TC003.png・・・にしたんですが、プログラムをどう書いていいのかわかりませんでした。
next_aaa

2017/12/09 08:13

紹介して頂いたサイトのプログラムを実行したらC:\Users\LSL\定義した文字領域内のデータをすべて表示させることができました。これをうまく二値化や面積、周囲長を求めるプログラムに応用したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問