• ベストアンサー

バイナリーファイルの変換

CCDカメラで取り込んだ画像ファイルがどうやらバイナリーで出力されているようなのです。(拡張子は.dat)テキストで読めるようにしたいのですが、どのように処理すればよいのでしょうか?Cプログラムは多少組めます。参考図書などあるようでしたらご教示いただけたら幸いです。よろしくお願いいたします。

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

  • ベストアンサー
  • K-1
  • ベストアンサー率21% (832/3844)
回答No.3

どういう意味でのテキストにしたいのでしょうか? 単にバイナリコードの16進ダンプとかでいいのですか? while(ファイルの最後まで)  1バイト読み込み  printf("%02x ", 読んだ1バイト); wend で、16進ダンプが取り出せます。 本や雑誌など文字を写した画像から、文字をテキストで取り出したい? OCRというソフトを使用します。 画像解析などの知識が必要なので初心者には自作は無理でしょうから市販のソフトを利用した方がいいです。

infinity40-100
質問者

お礼

お返事が大変遅れてしまい、申し訳ありませんでした。 バイナリーファイルについて自分がよくわかっていないことがわかりました。ただK-1さんが指摘されている”16進ダンプ”というような状況かと思われます。 まずは使用している装置の会社に問い合わせてみます。ありがとうございました。

その他の回答 (2)

  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.2

質問の意図として、CCDで読み取った画像ファイルの中身のバイナリーをテキスト形式に変換し 1画素単位の階調値を知りたいということでいいですか? まずバイナリーになってる以上そのフォーマットが解らないと手も足も出ません。 またカラー階調が16bitなのか24bitなのか。 たとえば1画素256階調でR=126 G=102 B=98 だったとき、そのままベタにバイナリーに置き換えてあるのか等 出力される**.datを生成してるソフトの仕様書には書いてあるでしょう。 製造してるメーカーがファイルフォーマット公開してくれれば前に進みますが、非公開の場合解析作業になりますから 膨大な時間と労力が必要です。 たとえば単純にRGBをベタにバイナリーにしていれば、各RGBのデーター長は固定長のはずですから8bit単位に切り出せば 解るでしょ。

infinity40-100
質問者

お礼

お返事が大変遅れてしまい、申し訳ありませんでした。 どうやら製造しているメーカーに聞くしかないようです。それがわかっただけでも答えていただいた甲斐がありました。ありがとうございました。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

画像ファイルからテキストを取り出すには「OCRソフト」を使用します。 個人で一から作るのはまず無理でしょう。

関連するQ&A

  • 画像をバイナリデータに変換する方法

    ディレクトリ内にある『.gif』の画像~枚を 100kb単位でバイナリデータに変換して 『.dat』という拡張子で出力させたいと思っています。 Perlをふれた事はあまり無く、何から手を付ければ良いのかいまいちつかめません。 『.gif』を100kb単位でバイナリデータに変換する方法など、知っている方いましたら御教授お願い致します。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • 入力ファイルをバイナリにする利点

    CSV形式の入力ファイルをテキストではなく、バイナリのCSVに変換して利用する利点てなんでしょうか? つまり、とあるプログラムで「.csvファイル」を、エディタで開くと文字化けする「拡張子なし(または.dat)ファイル」に変換してからそれを入力ファイルとしているのですが、素人の自分から考えると、テキスト形式で作ったCSVファイルをそのまま入力ファイルにすればいいんじゃないかと思ってしまいます。 バイナリの方が読み込み、書き込みが速くなるのでしょうか? またはバイナリでないとできないことがあるのでしょうか? ポインタなどが関係しているのでしょか? ちなみにその開発環境はVC++です。

  • バイナリの読み方

    画像を数字にして処理するプログラムを作りたいのですが、 jpegのバイナリデータの読み方を解説しているようなサイトってないでしょうか。

  • VB2005におけるバイナリファイルの入出力

    例えば「12345678」であれば「12 34 56 78」いうバイナリファイルが出力されるようにしたいのですが、 Using writer As New System.IO.BinaryWriter(New System.IO.FileStream("test.dat", IO.FileMode.OpenOrCreate)) writer.Write(&H1234S) writer.Close() End Using このプログラムの場合、出力される"test.dat"の内容は「34 12」であり、しかも4バイトを超えるとオーバーフローしてしまうため出力することができないというエラーが出ます。 ない知恵を絞って調べているのですが、ここで詰まってしまいました。 どうか、よろしくお願い致します。

  • テキストファイルのデータからバイナリを作りたい

    現在、テキストデータとしてCSVファイル1つあたり8バイトのデータが1000個ほどのデータが書かれているファイルがあります。このデータをバイナリファイルへ数値も変換して行きたいと思っています。 たとえば1個目のデータ”12345678”というテキストデータをバイナリの"12345678"に変換したらそれを0x00番地に並べて、そして2個目のデータ”87654321”というデータをバイナリにしたらそれを0x90離れた場所に置いていき、それを1000回繰り返して、結果をバイナリファイルで出力したいのですが、何か簡単にできるフリーソフトなどありませんでしょうか? また、プログラムとかでも簡単にできるのならそうしたいのですが、どうしたらよいか教えていただけないでしょうか?

  • この方法でバイナリデータが読めるのでしょうか

    あるプログラムでバイナリ出力しているファイルがあります。これを単純にfread()で読み込んで、今度はfprintf()で出力すればどうなりますか?やりたいことは、バイナリ出力されたファイルをテキストファイルに変換したいのですが、この方法で、バイナリファイルが読めるでしょうか? ちなみに、読みたいバイナリファイルは、fwrite()で書き出したファイルです。 あと、「バイナリファイルです」と言って貰ったファイルを、windowsのテキストエディタなどで開くと、appleなどの通常のアルファベットの単語と、あとは訳のわからないものが見えるのですが、これってバイナリファイルじゃないですよね?appleなどと書いてあるのですから。 間違えていましたら、訂正お願いします。

  • バイナリファイルをテキストファイルに変換する方法を教えて頂けませんか。

    こんにちは。 バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。 以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。 ####プログラム#### #include<stdio.h> int main(){ FILE *fp,*fp2; char str[1024]; //file.txtはバイナリファイルなのでバイナリモードで開く if((fp = fopen("file.txt","rb")) == NULL){ printf("file.txt:open error"); exit(-1); } //out.txtはテキストファイルとして保存したいのでテキストモードで開く if((fp2 = fopen("out.txt","at")) == NULL){ printf("out.txt:open error"); exit(-1); } //一行ずつバイナリファイルをテキストファイルにして保存 while((fgets(str,1024,fp)) != NULL){ printf("%s\n",str); fprintf(fp2,"%s\n",str); } fclose(fp); fclose(fp2); return 0; } ####ここまで#### 以下が出力されたテキストファイル(out.txt)です。 ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^D&ordm;?^QI&egrave;&Ccedil; ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^D&ordm;?^QI0g 酷い文字化けを起こしてしまっています。 解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。

  • C#でバイナリデータをテキストフォームへ表示させるには?

    C#でバイナリデータをテキストフォームへ表示させるには? C#でバイナリファイルをテキストへ変換するツールを作成しています。 バイナリデータを配列へ格納し、その配列をテキスト変換してテキストフォームへ出力させるという処理を作成したいのですが、どうすれば良いのかどうしてもわかりません。 どのようなコードをどのようにして書けばよいのか、ご教示いただけないでしょうか。 よろしくお願いします。 (ちなみにC#を始めて1週間ほどです)

  • Cでバイナリデータを変換

    今持っているバイナリファイルfile1.x86をテキストファイルfile1.txtに変換したいんですけどうまくいきません。fopenとfreadでバイナリファイルを読み込むところまで入っていると思うんですけど、テキストファイルとして書き出すことができません。 #include <stdio.h> main() { short a[32000]; FILE *infile, *outfile; infile = fopen("iroha.x86", "r"); outfile = fopen("iroha.dat", "w+"); fread( a, sizeof(short), 32000, infile ); fwrite( a, sizeof(short), 32000, outfile ); fclose(infile); fclose(outfile); } これだとそのまんま出力されるんです。当たり前なんですけど... どこをどう変えればいいか教えてください。 よろしくお願いします。

  • バイナリファイルの読み込みについて

    java初心者です。 今バイナリファイルの読み込みを行っているのですがバイナリファイルのデータの値とプログラムで読み込んだ値が違っているので困っています。 バイナリファイルはASCIIテキストになっていてデータを見ることができ中身は -0.00012 -0.00009 -0.00009 -0.00012 -0.00009 -0.00009 -0.00009 -0.00012 ・・・・・・・(値が続くという意味です) となっています。 作ったプログラムは import java.io.*; class a { public static void main(String[] args) { try { FileInputStream in = new FileInputStream("file name"); int ch; while ((ch = in.read()) != -1) { System.out.println(ch); } in.close(); } catch (IOException e) { System.out.println(e); } } } で作って読み込んでみたのですが出力された値は 45 48 46 48 48 48 49 50 ・・・・・・ になってしまいます。 どのようにしたら値が等しくなるのでしょうか。教えてください。

    • ベストアンサー
    • Java