• ベストアンサー

C#で画像を2値化?したい!

bmpなどの画像データを2値化(0か1の値)にしたいです。 画像は白か黒の2色に設定しておき、 それをC#等で読み込み、2値化し、出力したいのです。 今まで方法がわからず、画像データを見ながら0や1を手入力でしてきたのですが、 量が膨大になってきたので追いつかなくなり、プログラムを組もうと考えました。 色々サイトも見てみたのですが、 方法がよく分かりませんでした。 良いサイト、もしくはプログラムを教えていただけるとうれしいです。 よろしくお願い致します。

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

  • ベストアンサー
  • 5S6
  • ベストアンサー率29% (675/2291)
回答No.1

今どこまでできているのか? 画像ファイルの選択、各種形式での読み込みなどができているということが前提で http://chihara.naist.jp/opencv/?%B2%E8%C1%FC%A4%CE2%C3%CD%B2%BD%BD%E8%CD%FD http://mtws.miniy.net/program/image_filter/ http://homepage3.nifty.com/ishidate/vcpp10_g9/vcpp10_g9.htm を参考にしてください 言語が違いますがその辺は変換してください。 VCとC#ならほとんど一緒ですし 256色のBMP変換すればバイナリデータで 00 01 01 00 00 01 00 01 ・・・・ などになっているので自然にできると思いますよ。 3つめのURLなら、特にファイル変換も容易だと思います。

関連するQ&A

  • 画像ファイルを2進数で表したい(C#)

    PGMでもBMPでもどの画像形式でもかまわないのですが、 画像を2進数で表したいです。 画像は、白と黒のみを使います。 □□□■■□□□ □□■□□■□□ □□■□□■□□ □□■■■■□□ □□■□□■□□ □□■□□■□□ こういう画像データを読み込んだ場合、 00011000 00100100 00100100 00111100 00100100 00100100 このように表示するプログラムを組みたいと考えています。 画像データを文字に変換する方法が良く分かりません。 初心者向けに、教えていただけると有難いです。 回答よろしくお願いします。

  • C言語でBMP画像(ファイル)は作れますか?(Unix使用)

    こんにちは。私は30代男性です。 先日はBMPを読み込んでUnix上でイメージ表示するプログラムを作ろうとしていましたが、ようやく完成しました。ご協力いただいた方々にお礼申し上げます。 次にチャレンジしようとしていることは、「BMPファイルに画像を書き出す。」というものです。画像は横4ピクセル・高さ256ピクセルのサイズで、とりあえず1行ずつRBG値を増やして「色の作成」の時に出てくるような長方形型の色指定用のグラデーション表示をしてみようかなと思っています。 →つまり、色の変化はRBG(0,0,0,)からRBG(255,255,255)にずらしていくという感じです(黒→灰色→白とでもいいましょうか)。 これはパレットに設定する値をfor分でループさせればいいかなと思いましたが、プログラムでBMP画像を作り出すことは無理なんでしょうか?ファイルがない状態からファイル名を指定して作るとしたら、offset値をどのように設定したらいいのかなど、わからないことだらけです。 アドバイスを頂けたらありがたいです。どうぞ宜しくお願い致します。

  • 画像の白と黒のドットを数えたい

    例えば白と黒だけで描かれたビットマップ画像を用意し(白黒であればbmpでなくてもどんな形式でも良い)、縦のラインで白は幾つあるか、黒は幾つあるかを画像全体に関して求めるにはどうすればいいでしょうか。 例えばWindowsのペイントでペンツールだけで適当に絵を描いた大きさ640×384のビットマップ画像の場合、ある縦のラインでは白は120、黒は264あり、その隣の縦のラインでは白は124、黒は260あり、、、とこれを640回繰り返して画像の縦のラインでの白値と黒値の値を順次求めていってくれるような機能のあるソフトはあるでしょうか。 それともやはりC言語等のプログラミングで求めていくしかないでしょうか。 画像処理に詳しい方お願いします。

  • C言語での簡単な画像処理みたいなのですが

    初心者なんで言葉が適切でないかも知れませんがお許しください。 ”0”、”1”(白黒の対応)でできている何行何列かできている画像を読みこんで、自分が指定したある画像の一部の場所を出力するプログラムを作成したいのですがどうしたらよいのかさっぱりわかりません。 1ビットが白か黒か判断することはできたのですが、だれか教えていただけないでしょうか?御願いします。

  • C言語で大量の画像を処理する方法

    C言語で大量の画像を処理する方法について 今度C言語もしくはC++で大量の画像を処理することとなったのですが、 大量の画像に対して同じような処理をする場合なにかいい方法はないでしょうか? 具体的には 画像1を読み込む ↓ 画像1に処理を施し、その値を出力 ↓ 画像2を読み込む ↓ のような感じです。 ここでいう処理は画像の信号によって値は変わりますが、処理方法は同じです。 よろしければ参考になるサイト等も教えていただけると助かります。

  • VBAで配列からbmp画像を出力する方法

    VBAで配列からbmp画像を出力する方法を教えてください。 例えば、 dim a(255,255) で作成した二次元配列があり、それぞれの中に0~255の数値が格納されているとします。 この画像からグレースケールあるいは任意の配色で 256x256の解像度のbmp画像を出力するプログラムを VBAで作りたいのですがどのようにすれば良いですか? 検索して調べたのですが、 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=54343;id=excel http://akadamashy.blog68.fc2.com/blog-entry-915.html のサイトにビットマップ画像を出力するための プログラムが記載されていました。 しかしながら、どうしても配列からどうやって出力すれば良いか分かりません。 どなたか教えてください。

  • C++のプログラミング(画像処理)

    VisualC++を使ってJPEG画像をデスクトップなどから読み込み、何か加工して出力するというプログラムを作ろうとしています。 JPEG画像を読み込んで、出力するだけのプログラムをまず作りたいのですが、アドバイスいただけないでしょうか。 今まで使っていたのがJAVAであったためC言語の事があまりよくわかりません。できるだけ簡単な方法があればお願いします。

  • BMP画像ファイルの読み書き

    Visual StudioのC言語により、ビットマップ形式の画像に対するプログラミングで 簡単な背景差分のプログラムを作成しています。 背景画像と対象画像2枚を読み込み色の差を取り、 差の値が背景の値と近ければ背景とみなし白で塗りつぶし、 物体だけを表示した画像を生成するようなプログラムです。 1枚のみの画像は以下のプログラムで作動しますが、連続した画像(01.bmp 02.bmp ・・・・100.bmp) を読み込み上記の処理をする場合にはどうすればよいのでしょうか? 分かりにくくて申し訳ないですが、よろしくお願いします。 #include "BMPData.h" #include <math.h> int main(){ int a=150; int i,j; int r,g,b; int ir,ig,ib; int diff; BMPStruct bmp_bg; BMPStruct bmp_oj; BMPStruct bmp; RGB rgb_bg; RGB rgb_oj; RGB rgb; RGB rgb_w; rgb.r = 255; rgb.g = 255; rgb.b = 255; rgb_w.r = 0; rgb_w.g = 0; rgb_w.b = 0; readBMP(&bmp_bg, "back.bmp"); //背景画像の読み込み readBMP(&bmp_oj, "01.bmp"); //対象画像の読み込み makeBMP(&bmp,640, 480, rgb); //出力用画像を生成する for(i=0; i<640; i++){ for(j=0; j<480; j++){ getColor(bmp_bg, &rgb_bg,i,j);  //背景画像の色を取得 getColor(bmp_oj, &rgb_oj,i,j);  //対象画像の色を取得 //rgbそれぞれの値の差 r = rgb_bg.r - rgb_oj.r; g = rgb_bg.g - rgb_oj.g; b = rgb_bg.b - rgb_oj.b; //絶対値 ir = abs(r); ig = abs(g); ib = abs(b); //色の差 diff = ir + ig + ib; //背景かどうかの判定 if(diff>a){ putColor(bmp, rgb_w, i, j); //色の差が大きければ出力画像に対象画像の色をそのまま出力 } else{ putColor(bmp, rgb, i, j); //色の差が小さければ白を出力 } } } writeBMP(bmp, "image01.bmp"); }

  • C言語→MATLABへの変換で、困っています。

    学生研究でMATLABを使用しています。 光学測定系で画像を取り込み、それを解析する実験を行っています。 MATLABはプログラム内の値の変更や処理の追加できることから 大変助かっています。 そこで、もともとはC言語でやっていた3種類の処理を 一つのMファイルで行いたいと思い。 只今、C→MATLAB変換するプログラムの書き直しを行っています。 そのうち2種のプログラムは行列の計算がメインだったため何とか Mファイルに書き直すことができたのですが、 最後のひとつが難しい関数らしきものが多く、 MATLABに書き直すことができるプログラムなのかもわからない状態です。 そこで、 ・C→MATLAB変換可能なプログラムか? ・書き直すにあたってどこを部分を直せばよいのか? をアドバイスいただけないでしょうか? ↓MATLAB化したいC言語ファイル http://karispace.web.fc2.com/cmat2.c 一枚のbmp画像から4枚のdatデータを出力するプログラムです。 C言語とMATLABの三ヶ月前に勉強して、使用しており、基礎がわかる程度です。 よろしくお願いします。

  • 圧縮について

    私は今画像の勉強をしており、bmp画像をスキャンし画像のデータを文字になおし例えば(255255255255・・・)の用に出力されそれをbzip2を使い圧縮したものとbmp 画像をただ単にbzip2で圧縮したものを比べるとサイズが絵によって違います。なぜなのか教えてください。画像は白黒でR=G=Bです。私としては黒の割合が多いとRGB値は255なのでサイズが大きくなってしまう(白だとRGB値が0)なので。だからそれによって変わってしまうと思ったのですが・・・。

専門家に質問してみよう