回答受付中の質問
C言語で画像処理をしたいのですが、モザイクと画像の大きさを半分にしたいのですが...
C言語で画像処理をしたいのですが、モザイクと画像の大きさを半分にしたいのですが、モザイク処理の関数と画像の大きさを半分にする関数を作るのですが、いまいちわかりませんどんな感じでつくればいいですか?
モザイク処理は4重ループを使えばいいかもといわれたのですが、いまいちわかりません。
4*4のピクセルの平均をとるのに二重をforループを使う感じなんですが、何のために4重ループを使うとうまくできません
double A[][]
unsigned char image[][].R
for(i=0;----)
for(j=0-----)
for(x=0+i----)
for(y=0+j-----)
A[x][y]=(image[x][y].R+image[x][y].G+image[x][y].B)/4
平均をとるときに上のようにしてもうまくできません
どうしてできないか教えてください
大きさを半分にする時のポイントを教えてください
-
- 質問日時:
- 2010/10/17 18:35:11
-
- 残り時間:
- 7日間
-
- 回答数:
- 1
-
- お礼:
- 知恵コイン
- 50枚
-
- 閲覧数:
- 34
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
回答
(1件中1〜1件)
quickbrwnfoxjumpsoverthelazydogさん
まず落ち着いて、やりたいことをしっかりと整理しましょう。日本語での表現も滅茶苦茶な状態で、プログラム言語に落とし込めるわけがありません。
> どうしてできないか教えてください
やっていることが滅茶苦茶だからです。
同じ画素のRGB値を足して4で割るっていったい何の計算でしょう? いわゆるモザイクなら、近傍画素のR,G,Bそれぞれの平均をとることになるでしょう。この'近傍'をかき集めるときにループを使うと都合4重ループになることもあるでしょうが。
サイズを半分にするのは、高等なことを考えるといろいろあって大変ですが、最初は単純に画素を一個おきにとりだすことから始めてみてはいかが。
いろいろ勝手に仮定しますけど、モザイクについては
#define MOSAIC_SIZE 4
#define WIDTH 100
#define HEIGHT 100
//unsigned char image[][].R /* この表記はC言語ではあり得ない */
typedef struct{
unsigned char R,G,B;
} Image;
Image image[HEIGHT][WIDTH];
Image out[HEIGHT][WIDTH];
unsigned int pixel_R,pixel_G,pixel_B
for(i=0; i<WIDTH; i+=MOSAIC_SIZE){
for(j=0;j<HEIGHT; j+=MOSAIC_SIZE){
pixel_R=0;pixel_G=0;pixel_B=0;
for(x=0;x<MOSAIC_SIZE; x++){
for(y=0;y<MOSAIC_SIZE; y++){
pixel_R+=image[j+y][i+x].R; /* 各画素、各色の成分の総和を求めていく */
/* G/Bについても同様 */
}
}
pixel_R/=MOSAIC_SIZE*MOSAIC_SIZE; /* 総和を画素数で割れば平均 */
/* G/Bについても同様 */
/* モザイクの1マスの範囲内は同じデータで埋める */
for(x=0;x<MOSAIC_SIZE; x++){
for(y=0;y<MOSAIC_SIZE; y++){
out[j+y][i+x].R=pixel_R; /* 処理後の画像を構成 */
/* G/Bについても同様 */
}
}
} /* for jの閉じ*/
} /* for iの閉じ*/
ってな感じかな。検証はしてません。
大きさを半分(面積は1/4)は、例えば
Image image[HEIGHT][WIDTH];
Image out[HEIGHT/2][WIDTH/2];
for(i=0;i<WIDTH; i+=2){
for(j=0;j<WIDTH; j+=2){
out[j/2][i/2]=image[j][i];
}
}
みたいなのが手始めでしょう。
- 違反報告
- 編集日時:2010/10/18 10:25:00
- 回答日時:2010/10/18 08:52:30