pgmファイルの読み込みで正確にデータを読み取れない原因について

このQ&Aのポイント
  • jpgファイルをpgmファイルに変換して処理を行うプログラムを作成中ですが、pgmファイルのデータを正確に読み取れません。
  • pgmファイルの輝度データの一部は正しく読み取れますが、それ以降のデータが全て255になってしまいます。
  • プログラムの問題以外に考えられる原因があれば教えてください。
回答を見る
  • ベストアンサー

pgmファイルの読み込み

jpgファイルをpgmファイルにしてpgmファイルで処理を行うプログラムを作ろうとしています。 jpgファイルからpgmファイルへの変換は手動で行い処理を行ったところ、 何故かpgmファイルを正確に読み取ることができませんでした。 pgmファイルの輝度データの最初の一部は正確に読み取ることができたのですが、 それ以降のデータが全て255になってしまうという状態になってしまい困っています。 ちなみに最初からpgmファイルであるものを読み取った場合だと正確に読み取ることができ、 jpgファイルから変換したpgmファイルを読み取るときだけ正確に読み取れない状態です。 もしかしたらプログラムの問題ではないかもしれないのですが、 考えられる原因を思いつく方がいらっしゃったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.2

>すいませんがpgmリーダーとは、自分のプログラムのpgmファイルの読み込み部のことでしょうか? そうです。 >読み込みは元からpgmのものを使用したときはきちんと読み込んでくれるので、間違えは無いと思うのですが・・・ 間違いとは言っていません。想定していなかった入力に対して不具合が発生しているのであれば、それを修正するという事です。 間違っていないと主張されるのであれば、それはそれでいいのですが、であるならばスレ違いでしょう。 デバッガの使い方がわからないという事ですが、比較的小さいjpgファイルを作成して(例えば5×5ピクセルとか)、それをpgmに変換します。 pgmがバイナリであればバイナリエディタで確認して、自分が予想しているものと全く同じかどうか検証してみてださい。 あとWindows系であれば、fopen でファイルを開いている場合、バイナリモード "rb" で開かないとうまくいかない事があります。

hirasyan
質問者

お礼

すばやい返信ありがとうございます。 >あとWindows系であれば、fopen でファイルを開いている場合、バイナリモード "rb" で開かないとうまくいかない事があります。 これでした^^; 元からpgmファイルの場合は動いたので見逃してました。 本当にいろいろアドバイスありがとうございます。

その他の回答 (1)

noname#30727
noname#30727
回答No.1

jpg→pgmの手動変換が間違っているか、pgmの読み込みが不完全かのどちらかしかないでしょう。 どちらにしても、pgmリーダーをデバッガでトレースしていけば原因究明できると思うのですが・・・。

hirasyan
質問者

補足

回答ありがとうございます。 えっとですね、今回はjpg→pgmの変換は既存のソフト(ペイントショップなど)を用いて変換しているので、 変換に間違いは無いと思います。 読み込みは元からpgmのものを使用したときはきちんと読み込んでくれるので、 間違えは無いと思うのですが・・・ デバッガは・・・以前見てよく分からなかった;; すいませんがpgmリーダーとは、 自分のプログラムのpgmファイルの読み込み部のことでしょうか?

関連するQ&A

  • IrfanviewにおけるPGMファイル出力について

    Irfanviewでjpeg画像をグレースケール化し、PGMファイルで出力しました。出力方法はバイナリではなく、アスキーにしました。すると、1行あたり16個の整数がずうっと下のほうまで続いているのですが、ところどころ、改行コードが抜け落ちたのか、32個の整数が並ぶ行が発生します。これは何か意味があるのでしょうか?それとも単なる処理落ちなのでしょうか?もし処理落ちなのだとしたら、ちゃんと全ての行が16個ずつの値になるようにできないでしょうか?あとでプログラム処理するときに不便です。

  • C言語での画像処理:jpeg→pgmへ

    Linux(Fedora core 4)を使っております。 今回C言語で画像処理を行いたいと考え、画像の形式がpgm形式としてのプログラムを組みました。 このプログラムを、実際にデジカメでとった写真について使いたいのですが、デジカメで撮った写真はjpeg形式の為、これをpgm形式に変換したいのですが、これはプログラムを作って行うことはできるのでしょうか。もしくはツールが必要なのでしょうか。ちなみに当方プログラミング初心者でございます。 よろしくお願い致します。

  • C#のファイル読み込みについて

    Visual C#を使用したプログラムを勉強中です。 今まではCOBOLでの開発しか、経験したことがありません つい先日から勉強を始め、現在ドリル式の参考書を読み終え 各種コントロール、コンポーネント、ダイアログなども ごく簡単なサンプルプログラムを使用して触ってみました。 つぎのステップとして、自作のプログラムを作成してみようと 考えていたのですが、最初の段階で躓いてしまったので 質問させていただきます。 仕様としては、csvファイルにて 「番号,名前,値1,値2,値3」というデータファイルを作成しておき それをアプリケーション起動時に読み込む TextBoxに文字を入力し、検索ボタンを押すことで データファイルの「名前」部分と一致したデータの内容(値1,値2...)を Label、もしくはTextBoxの指定した箇所にそれぞれ表示をさせようと考えています。 こういった仕様のプログラム(というより、C#での考え方)の場合 最初のデータ読み込みの段階で、csvファイルから配列にデータを 読み込んでおくのか、 検索ボタンを押した段階でファイルから読み込み該当項目を探すのか どちらが良いのでしょうか? データ件数が膨大な量でない限り、前者の方法が適しているのではないかとは 考えています。 また、よろしければ簡単にプログラムでの書き方も 併せて教えていただけると、とてもありがたいです・・・ 今現在のスキルとしては、ファイルの読み込みに関してはopenFileDialogを使用して ファイルを指定し、FileStreamを取得、streamReaderで読み込み richTextBoxに表示させる、というような処理しか理解できていません

  • ファイルが壊れる

    最近、zipファイルに圧縮したjpgファイルが壊れて読み込めないという現象が多発しています。 一気に壊れるという感じではなく、圧縮データーの一部が、ぽつりぽつりと壊れてしまいます。 ほかのデーターは見た目上は問題ないように思います。 最初はHDを疑って、別のドライブにデーターを退避させていたのですが、 そちらのHDの中の画像データーも壊れてしまいました。 三つのHDで同じ現象が起きたので、HDが原因ではないのでは? と考えています。 こんなに壊れてしまうと、正直怖くて保存できません。 どのようなことが原因として考えられますでしょうか? 対策なども併せて教えてください! お願いします

  • pgm画像入出力(C言語)

    画像入出力のプログラムを書いた(とあるサイトからパクった)のですが、出力画像のテキストデータが文字化けしてしまいます。原因究明お願いします。このプログラムでは2倍に変換していますが、そこは重要ではなく、入出力さえできればいいです。 OS:windows 文字コード:色々試したけどダメ。試してないものもあるかも。 プログラム #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fpi, *fpo; unsigned char idat; /* 引数のチェック */ if (argc != 3) { fprintf(stderr, "Usage: %s [input] [output]\n", argv[0]); exit(1); } /* 入力画像のオープン */ if((fpi=fopen(argv[1], "rb")) == NULL){ fprintf(stderr, "input file open error\n"); exit(1); } /* 出力画像のオープン */ if((fpo=fopen(argv[2], "wb")) == NULL){ fprintf(stderr, "output file open error\n"); exit(1); } /* 入力画像の読込み */ while (fread(&idat, sizeof(unsigned char), 1, fpi) == 1){ /* 2倍の変換 */ if (idat * 2 > 255) { idat = 255; } else { idat = idat * 2; } /* 変換データの書出し */ if(fwrite(&idat, sizeof(unsigned char), 1, fpo) != 1){ fprintf(stderr, "data write error\n"); exit(1); } } fclose(fpi); fclose(fpo); return (0); } コンパイル方法(cygwin) ./a 入力画像.pgm 出力画像.pgm

  • csvファイルの読み込みができません。

    csvファイルの読み込みができません。 過去にExcelで作成したデータをcsvに変換するマクロを作ってもらいました。 (Excel表の中にマクロを登録したボタンがあって、それをクリックするとcsvファイルが作成される) そのcsvファイルをそのまま使用すると、読み込みができますが、一旦csvファイルを開いて一部データの変更をして保存すると読み込みができなくなります。 また、自動にファイル名が設定されるので、わかりやすいようにファイル名を変更しただけでも読み込みができなくなります。 csvファイルにも種類があるんでしょうか?

  • VB.NETでの特殊なファイル削除操作

    VB.NETでの特殊なファイル削除操作 フォルダ内に以下例のような撮影された画像ファイル群があり、各ファイル名は撮影時間を元に(年月日_時分秒_ミリ秒)名前付けされたもので、この同じ「秒」内に撮影された2枚目以降のファイルを、プログラム的に削除したいのですが、上手くいきません。 フォルダ内のファイル 20100709_135601_113.jpg 20100709_135601_222.jpg 20100709_135601_316.jpg 20100709_135601_364.jpg 20100709_135602_347.jpg 20100709_135602_425.jpg 20100709_135603_910.jpg 20100709_135605_175.jpg 20100709_135605_251.jpg 20100709_135606_628.jpg 例えば、一番上の13時56分01秒には、4枚撮影されたjpgファイルがありますが、最初に撮影された「20100709_135601_113.jpg」 だけを残し 残りの 「20100709_135601_222.jpg」 「20100709_135601_316.jpg」 「20100709_135601_364.jpg」 のファイルを消し、1秒1ファイルだけにしたいのです。 そしてこの結果を 20100709_135601_113.jpg 20100709_135602_347.jpg 20100709_135603_910.jpg 20100709_135605_175.jpg 20100709_135606_628.jpg としたいのです。 なお、このjpgファイルを作成する側のアプリは触れません。 こちら側のプログラムで、削除処理を行いたいです。 ファイル名定義もこのままです。 135604のように、秒内で存在しないjpgファイルも存在します。 どなたか、よいお知恵をお貸し下さいませ。 どうぞよろしくお願いします。 (WinXP Vb.NET2010)

  • ファイルからのデータ読み込みとデータ処理

    ActivePerlをインストールしたばかりの初心者です。 ファイルからデータを読み、データ処理をするプログラムをつくっている所ですが 、データファイルの読み込み後の処理がうまくいきません。 データ処理では、空白文字、マイナスの符号も含めて3個ずつで一つの数値とします。 $a ='-10 -1 0 22177'; @foo = split( /(\s\s\d|\s\d\d|\d{3}|-\d{2}|\s-\d{1})/, $a) ; print "@foo\n"; 【出力結果】 -10 -1 0 22 177 ファイルから1行ずつデータを読み込み、同様の処理を行う以下のプログラムですが、正しくファイルが表示された後は止まってしまいます。 どこで躓いているのかご教示下さい。 #プログラム $no = 1; while ($line = <>) { print $no, "\t", $line; print $line; ++$no; } while ($line = <>) { @foo = split( /(\s\s\d|\s\d\d|\d{3}|-\d{2}|\s-\d{1})/, $a) ; print "@foo\n"; }

    • ベストアンサー
    • Perl
  • AVIファイルの一部を切り取りJPGファイルに変換する方法を教えてくだ

    AVIファイルの一部を切り取りJPGファイルに変換する方法を教えてください

  • EPSをJPGに変換したい(大量にあるので一括処理で)

    お世話になります。 epsファイルをjpgに変換したくて、photoshopのバッチで行っていたのですが、途中でフリーズしてしまい使い物になりません。(原因は不明です) 何か他のソフトで一括処理できるようなものはないでしょうか? ファイルが300個くらいあるので、さすがに手動では・・。 クオリティやリサイズなどは拘りませんので、単純なもので結構です。 教えて頂けると幸いです。