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];
}
この上は全然違ってますか?
それともおしいとこまで来てますか?
画像処理について…
-
usao
Re: 画像処理について…
>途中なんでコンパイルすらできてないんですが…
まずは自分が思う方法で動かすところまでやってみて
それで確認した結果が「想定と違うけど,なぜそうなったのかわからない」という段階になってから
質問すればよいのではないでしょうか.
処理内容自体はちょっと検索すれば出てくる類のものですし,
何に困っているのかはっきりわからない現状では,役立つ助言も得られないと思います.
示された断片だけからでは何とも言えません.
画像中心を回転中心としたいならば,少なくとも画像中心の座標が出てくると思いますが,
pXdim1等がコメントの通りに画像全体の画素数なのであれば,そういったものが見当たらないので
想定した回転にはならないようにも見えますが…
まずは自分が思う方法で動かすところまでやってみて
それで確認した結果が「想定と違うけど,なぜそうなったのかわからない」という段階になってから
質問すればよいのではないでしょうか.
処理内容自体はちょっと検索すれば出てくる類のものですし,
何に困っているのかはっきりわからない現状では,役立つ助言も得られないと思います.
示された断片だけからでは何とも言えません.
画像中心を回転中心としたいならば,少なくとも画像中心の座標が出てくると思いますが,
pXdim1等がコメントの通りに画像全体の画素数なのであれば,そういったものが見当たらないので
想定した回転にはならないようにも見えますが…
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像処理について…
問題点を挙げさせて頂きます。
・sin/cosの引数はラジアン角です。int型ではないので注意してください。
・pimage1,2に関しては定義やら情報がないので何とも言えませんが、pimage1[y][x][k]である可能性も捨て切れません。
・pXdim2/pYdim2が画像中心座標ではありません。
コンパイルに関しては確認しておりません。
あとcodeタグをご利用ください。
・sin/cosの引数はラジアン角です。int型ではないので注意してください。
・pimage1,2に関しては定義やら情報がないので何とも言えませんが、pimage1[y][x][k]である可能性も捨て切れません。
・pXdim2/pYdim2が画像中心座標ではありません。
コンパイルに関しては確認しておりません。
あとcodeタグをご利用ください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。