0
我想在圖像上應用角度alpha的旋轉,但是我的函數並未給出預期的結果。 我必須將其用於OCR項目。C中的旋轉算法?
我用以下結構:
struct pixel
{
int red;
int blue;
int green;
int alpha;
};
struct image_bw
{
int *img;
int w;
int h;
};
struct image_rgb
{
int h;
int w;
struct pixel* img;
};
這裏是我的功能:
void rotation_tab(int alpha,struct image_bw* img)
{
int w = img->w;
int h = img->h;
float radians = (2*3.1416*alpha)/360;
float cosine = (float)cos(-radians);
float sine = (float)sin(-radians);
float Point1x=(h*sine);
float Point1y=(h*cosine);
float Point2x=(w*cosine-h*sine);
float Point2y=(h*cosine+w*sine);
float Point3x=(w*cosine);
float Point3y=(w*sine);
float minx=fmin(0,fmin(Point1x,fmin(Point2x,Point3x)));
float miny=fmin(0,fmin(Point1y,fmin(Point2y,Point3y)));
float maxx=fmax(0,fmax(Point1x,fmax(Point2x,Point3x)));
float maxy=fmax(0,fmax(Point1y,fmax(Point2y,Point3y)));
int destX = (int)ceil(fabs(maxx-minx));
int destY = (int)ceil(fabs(maxy-miny));
int *tab = malloc((sizeof(int))*destX*destY);
int midx = w/2;
int midy = h/2;
for (int x = 0; x < w; x++)
{
for (int y = 0; y < h; y++)
{
int xt = x - midx;
int yt = y - midy;
int xs = (int)round((cosine*xt - sine*yt) + midx);
int ys = (int)round((sine*xt + cosine*yt) + midy);
if ((xs >= 0) && (xs<w) && (ys>=0) && (ys<h))
{
tab[xs+ys*destX] = (img->img)[x+y*w];
}
}
}
img->w = destX;
img->h = destY;
img->img = tab;
}
你能發佈預期的和實際的產出嗎? – kdopen 2014-12-03 22:26:28
我只用3乘3矩陣和90度旋轉就試過了: {1 0 0; 0 1 0; 0 0 1} 預期的結果是: {0 0 1; 0 1 0; 1 0 0} 但實際結果是: {0 0 1; 0 -1956132512 32578; 0 1 0} (這些值每次執行我的程序時都不一樣) – 2014-12-04 12:21:31
我只是用3x3的單位矩陣和360度的旋轉試了一下。它產生了一個4x4矩陣 – kdopen 2014-12-04 15:03:13