画像処理
初歩的な質問なんですが、この下のプログラムは画像全体にモザイクをかけているものですが、画像上の範囲を指定して、その範囲内の領域だけモザイクをかけるにはどうしたらいいでしょうか?
void make_cmosaic_image()
{
int i,j,x,y,k;
int bsz; /*ブロックサイズ*/
int bx,by;
int bvaIR,bvaIG,bvaIB; /*ブロックの平均値*/
int pels;
int X,Y; /*ピクセルの位置*/
printf("カラー画像のモザイク化\n");
pXdim2=pXdim1;
pYdim2=pYdim1;
printf("ブロックサイズを入力してください(1より大きい値):");
scanf("%d",&bsz);
printf("ブロックサイズは%dである。",bsz);
if(pXdim1 % bsz ==0)
bx= pXdim1 / bsz;
else
bx=pXdim1 / bsz+1;
if(pYdim1 % bsz ==0)
by=pYdim1/bsz;
else
by=pYdim1/bsz+1;
/*モザイク化する*/
for(j=0;j<by;j++)
for(i=0;i<bx;i++){ /*ブロックごと に 計算する*/
/*各ブロックのピクセル平均値を計算する*/
bvaIR = bvaIG =bvaIB=0;
pels=0;
/*各ブロックのピクセル値の和を計算する*/
for(y=0;y<bsz;y++)
for(x=0;x<bsz;x++){
/*現在のピクセルの位置を計算する*/
X=i*bsz+x;
Y=j*bsz+y;
/*この位置が有効であれば、和を計算する*/
if(X>=0 && X<pXdim1 && Y>=0 && Y<pYdim1){
pels++;
/*和を計算する*/
bvaIR +=pimage1[0][Y][X];
bvaIG +=pimage1[1][Y][X];
bvaIB +=pimage1[2][Y][X];
}
}
bvaIR /=pels;
bvaIG /=pels;
bvaIB /=pels;
/*計算した平均値を目的画像へ代入する*/
for(y=0;y<bsz;y++)
for(x=0;x<bsz;x++){
X=i*bsz+x;
Y=j*bsz+y;
if(X>=0 && X<pXdim1 && Y>=0 && Y<pYdim1){
else
pimage2[0][Y][X]=bvaIR;
pimage2[1][Y][X]=bvaIG;
pimage2[2][Y][X]=bvaIB;
} } } }