ここから本文です

回答受付中の質問

知恵コレに追加する

C言語で画像処理をしたいのですが、モザイクと画像の大きさを半分にしたいのですが...

abc9540xyzさん

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

平均をとるときに上のようにしてもうまくできません
どうしてできないか教えてください

大きさを半分にする時のポイントを教えてください

違反報告

この質問に回答する

回答

(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

この質問に回答する

PR

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

ただいまの回答者

13時40分現在

2902
人が回答!!

1時間以内に5,119件の回答が寄せられています。

>>回答ひろばに行く