はじめまして。
画像変換に関する質問させてください。
グレースケールの画像を取り込んで、
各pixelの値(濃度)によって仮の色(擬似カラー)を付けたいと思っています。
VB、C++でソースを作成中なのですがうまくいきません。
もしよろしければ手取り足取り教えていただけないでしょうか?
よろしくお願い致します。
>もしよろしければ手取り足取り教えていただけないでしょうか?
これは回答不要といってるに等しいぞ
すみません。。
実際のプログラムを組むのは初めてなのものでして。。
サークル感覚でプログラムを組む会に入りまして、
どんな方法でもいいから。と画像変換に関する課題を出されたんです。
回答していただけないでしょうか?
出題者なり他のメンバーなりに聞いてみるのが先じゃなかろうか。
というか、「はじめてのプログラミング」にはレベルが高すぎるお題だと思うが。
課題を丸々人に答えてもらって意味あるんだろうか…
編集 削除サークルがどんなところか知らないが
授業じゃないから興味のあるやつが集まっただけで
教える人とか教科書とかないんだろうな。
使うのはVisual C++なのか?
バージョンは?
Windowsにはグレースケール専用のフォーマットはないから
8ビットのビットマップで代用かな。
何処まで自力で出来る?
何がわからない?
コンパイルの仕方とかダイアログとかSDIからの説明となると
掲示板じゃ無理がある。
掲示板は、ちょっとした手助けしか出来ないよ。
お手数かけてすみません。残念ながら教える人は居ません。
会自体が創設間もないため教材用に買った本も数冊しかなく、
画像処理に関する物、全てが先輩方に貸し出し中でして。。
一冊図書館から借りてきて独学でやっているのですが、
Visual C++でバージョン(?)はMicrosoft Visual Studio.NET 2003となっています。
グレースケールに関しての画像取り込み、輝度を少し加工して名前変更してフォルダ内に保存する。
といったことはできたのですが、
カラー画像を扱うことに関しては全く初めてなものでして。。
グレースケールをforとif文で各pixelの輝度値によって擬似的な色を付けたいと思っています。
例えばですが
for(i=0;i<Yi_SIZE;i++){
for(j=0;j<Xi_SIZE;j++){
if (255 > ff[i][j])
hh[i][j] = *****;
elseif (150 > ff[i][j])
hh[i][j] = *****;
elseif (50 > ff[i][j])
hh[i][j] = *****;
else
hh[i][j] = *****;
}
} ※ff[i][j]...入力するもの hh[i][j]...出力するもの
のようにして
*****のところに色に関する値を入れればいいのかと思ったのですが、
全く見当違いなのかもしれません。
色を扱うにあたって宣言しなければならない関数や値その他。
また宣言の仕方など、教えていただければと思っております。
どんなフォーマットかは知らないが
色を変えてバイト列としてファイルに吐くだけなら何も宣言しなくてもいい。
ヘッダつけてBMPファイルに吐きたいならBITMAPINFO構造体使うと便利だが。
BITMAPINFO構造体はwindows.hインクルードすれば定義される。
(実際にはWingdi.hの中)
これで同じ画像を別のファイル名で保存できる
ところまで出来ているということですね。
for(i=0;i<Yi_SIZE;i++)
{
for(j=0;j<Xi_SIZE;j++)
{
hh[i][j] = ff[i][j];
}
}
そのグレースケールとかカラーの画像が何なのか
言ってもらわないとこちらも答えにくいので
勝手にWindowsのビットマップとして話を進めるよ。
24ビットのビットマップを作成すればWindowsで簡単に見られるし。
俺はめんどくさがりだからな
24ビットのビットマップを保存する部分までは説明しない。
というかビットマップ構造体の説明は大変。
8ビットのビットマップの読み書き表示が出来る前提で話し進めるよ。
ビット数を8じゃなくて24にして
1ピクセルが緑青赤という順番の3バイトで
カラーテーブル(パレットテーブル)は無しだよ。
あと、ビットマップって横1行が4の倍数になるようにしないといけないんだよね。
unsigned char blue[256];
unsigned char red[256];
unsigned char hh[Yi_SIZE][Xi_SIZE][3];
for(i=0;i<256;i++) blue[i] = 255-i;
for(i=0;i<256;i++) red[i] = i;
for(i=0;i<Yi_SIZE;i++)
{
for(j=0;j<Xi_SIZE;j++)
{
hh[i][j][0] = blue[ ff[i][j] ];
hh[i][j][1] = 0;
hh[i][j][2] = red[ ff[i][j] ];
}
}
動作確認してないので上手くいくか判りません。
それと
Windowsの8ビットのビットマップだったら
カラーテーブルのRGBを書き換えるだけで色を変えることができる。
返答ありがとうございます。
上記のプログラムを組み込んでみたところ、
ビルドできて実行したんですが出力画像が真っ黒でした。
出力される画像の各輝度による色は指定したいのですがどうすれば指定できますか?
グレースケール画像はrawファイル形式です。
できれば今回の出力画像もそうしたかったんですが、rawだと難しいのでしょうか?
最初にrawっていってもらわないとわからんよ。
http://ja.wikipedia.org/wiki/RAW%E7%94%BB%E5%83%8F
より抜粋
> RAW画像のデータフォーマットは
> 各メーカー・各機種によって違うため、
> 現像には対応ソフトウェアを用意する必要がある。
中略
> 2005年にはRAWフォーマットの互換性向上を目的として
> アドビシステムズがDNGフォーマットを提唱したが、
> カメラメーカー側の採用は進んでいない。
ということでカメラによってデータが違うので私には判りません。
いや、他の人にもわからんでしょ。
そうなんですか。。すいません。
rawがダメならばフォトショップでbmpに変換してからでも
大丈夫みたいなんです。
bmpではどうすればいいのでしょうか?rawから変換したら8bit表示みたいです。
何度もすみません。
「BMP フォーマット」で検索すればフォーマットについて山のように出てきますよ
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=%42%4D%50%20%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88
つーかそのサークルに入るの考え直しなさい。
そもそもこういう事を手取り足取り教えてくれるからサークルの意義があるんでしょ。初心者に対する宿題だとしても、こんな宿題を出すこと自体そのサークルおかしいよ(君が自分で考えた宿題にしても、それを推敲しないのがおかしい)。
教えることが出来る人間が一人も居なくて、あなた(達)が「教える人間」になる必要が在るというなら、そりゃ無謀な思い上がりだって。
友達探しが目的なら、他のサークルを探すか、そもそもサークル以外にも方法があるでしょう。
ゆとり教育か!