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

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

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

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

Q&A

解決済

1回答

975閲覧

画像処理をしたファイルが作成されない

Someiyosino

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2021/05/11 11:19

前提・実現したいこと

"lena.pgm"というファイルを"out.pgm"というファイルに画像処理したいのですが"out.pgm"が作成されません。
一連の関数で、入力ファイル"lena.pgm"から画像を読み込み、その中心から指定した半径(画素数)[100]の円の外側にある画素のレベルを0にして、結果の画像を出力ファイル"out.pgm"へ書き出したい(つまりマスク処理)のですがdig_image関数の定義が自信がありません。おそらくそこがおかしいと思うのですが分からないので質問させてもらいました。opencvやnumpyを使わずに動作させたいです。

発生している問題・エラーメッセージ

出力ファイルが作成されない

該当のソースコード

python

1def load_pgm(filename): 2 try: 3 fr=open(filename, 'rb') 4 except FileNotFoundError: 5 print("File '{}' not found".format(filename)) 6 return 7 try: 8 line1 = fr.readline() 9 line2 = fr.readline() 10 line3 = fr.readline() 11 pnmdata = fr.read() 12 except IOError: 13 print('File IO error in reading') 14 return 15 finally: 16 try: 17 fr.close() 18 except IOError: 19 print('Closing failure') 20 return 21 if line1 != b'P5\n': 22 print('Not P5 format') 23 return 24 sizelist = line2.split() 25 w = int(sizelist[0]) 26 h = int(sizelist[1]) 27 if w*h != len(pnmdata): 28 print('Corrupt P5: {0}, {1}, {2}'.format(w, h, len(pnmdata))) 29 return 30 print('P5; {0}, {1}. {2}'.format(w, h, len(pnmdata))) 31 return(w, h, pnmdata) 32 33def make_array(yoko, tate): 34 imagearray = [0]*tate 35 for i in range(tate): 36 imagearray[i] = [0]*yoko 37 return imagearray 38 39def get_array_from_bytes(imagearray, imagedata, yoko, tate): 40 k = 0 41 for j in range(tate): 42 for i in range(yoko): 43 imagearray[j][i] = int(imagedata[k]) 44 k+=1 45 46def put_array_to_bytes(imagearray, yoko, tate): 47 import struct 48 x = b'' 49 for j in range(tate): 50 for i in range(yoko): 51 x += struct.pack('B', imagearray[j][i]) 52 return x 53 54def save_pgm(filename, imagedata, yoko, tate): 55 if yoko*tate != len(imagedata): 56 print('Corrupt P5: {}, {}, {}'.format(yoko,tate,len(imagedata))) 57 return False 58 try: 59 fw = open(filename, 'wb') 60 except IOError: 61 print("File '{}' open failure".format(filename)) 62 return False 63 s = 'P5\n{0} {1}\n{2}\n'.format(yoko,tate,255) 64 try: 65 fw.write(s.encode('utf-8')) 66 fw.write(imagedata) 67 fw.flush() 68 fw.close() 69 except IOError: 70 print('File IO error in writing') 71 return False 72 else: 73 return True 74 75def dig_image(outimg, srcimg, yoko, tate, hankei): 76 for j in range(tate): 77 for i in range(yoko): 78 if (j-tate/2)**2+(i-yoko/2)**2 > hankei**2: 79 outimg[j][i] = 0 80 else: 81 outimg[j][i]=srcimg[j][i] 82 return 83 84yoko, tate, srcdata=load_pgm('lena.pgm') 85srcarray=make_array(yoko,tate) 86get_array_from_bytes(srcarray,srcdata,yoko,tate) 87outarray=make_array(yoko,tate) 88dig_image(outarray,srcarray,yoko,tate,100) 89outdata=put_array_to_bytes(outarray,yoko,tate) 90save_pgm('out.pgm',outdata,yoko,tate)

試したこと

実行結果は P5; 256, 256. 65536 Trueと表示されていました。

補足情報(FW/ツールのバージョンなど)

Python3

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

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

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

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

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

hoshi-takanori

2021/05/11 14:32

out.pgm ちゃんと出力されましたけど…。
Someiyosino

2021/05/11 15:17

すみません、lena_out.pgmとしたら出力されました、ご迷惑をおかけしました。
guest

回答1

0

自己解決

出力ファイル名をlena_out.pgmとしたら実行された。

投稿2021/05/11 15:22

Someiyosino

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問