ページ 11

画像処理について…

Posted: 2013年5月01日(水) 16:25
by sky
C言語で#include <math.h>を使って、画像中心を回転中心として時計回りに任意の角度回転するプログラムを作りたいんですが、どうしたらいいですか?
途中なんでコンパイルすらできてないんですが…
int x,y,k,p,x1,y1;
printf("何度で画像を回転させますか?");
scanf("%d",&p);
pXdim2 = pXdim1; //横画素数
pYdim2 = pYdim1; //縦画素数

for(y=0; y<pYdim2; y++)
for(x=0; x<pXdim2; x++)
for(k=0; k<3; k++){

x1 = ((x-pXdim2)*cos(-p) - (y-pYdim2)*sin(-p)) + pXdim2;
y1 = ((x-pXdim2)*sin(-p) + (y-pYdim2)*cos(-p)) + pYdim2;
}
if( x1>=0 && x1<pXdim2 && y1>=0 && y1<pYdim2 ) {
pimage2[k][y][x] = pimage1[k][y1][x1];
}

この上は全然違ってますか?
それともおしいとこまで来てますか?

Re: 画像処理について…

Posted: 2013年5月01日(水) 16:50
by usao
>途中なんでコンパイルすらできてないんですが…

まずは自分が思う方法で動かすところまでやってみて
それで確認した結果が「想定と違うけど,なぜそうなったのかわからない」という段階になってから
質問すればよいのではないでしょうか.

処理内容自体はちょっと検索すれば出てくる類のものですし,
何に困っているのかはっきりわからない現状では,役立つ助言も得られないと思います.

示された断片だけからでは何とも言えません.
画像中心を回転中心としたいならば,少なくとも画像中心の座標が出てくると思いますが,
pXdim1等がコメントの通りに画像全体の画素数なのであれば,そういったものが見当たらないので
想定した回転にはならないようにも見えますが…

Re: 画像処理について…

Posted: 2013年5月01日(水) 17:18
by softya(ソフト屋)
問題点を挙げさせて頂きます。
・sin/cosの引数はラジアン角です。int型ではないので注意してください。
・pimage1,2に関しては定義やら情報がないので何とも言えませんが、pimage1[y][x][k]である可能性も捨て切れません。
・pXdim2/pYdim2が画像中心座標ではありません。
コンパイルに関しては確認しておりません。

あとcodeタグをご利用ください。