// 顺时针 90 度
// src 图像数据
// srcW 图像宽度
// srcH 图像高度
// channel 图像通道,如果是RGB,BGR,=3, RGBA = 4,GRAY=1
注意旋转90 后,图像数据的宽高会对调,显示时候自己注意
int RotationRight90(unsigned char * src, int srcW, int srcH, int channel)
{
unsigned char * tempSrc = NULL;
int mSize = srcW * srcH * sizeof(char) * channel;
int i = 0;
int j = 0;
int k = 0;
int desW = 0;
int desH = 0;
desW = srcH;
desH = srcW;
tempSrc = (unsigned char *)malloc(sizeof(char) * srcW * srcH * channel);
memcpy(tempSrc, src, mSize);
for(i = 0; i < desH; i ++)
{
for(j = 0; j < desW; j ++)
{
for(k = 0; k < channel; k ++)
{
src[(i * desW + j) * channel + k] = tempSrc[((srcH - 1 - j) * srcW + i) * channel + k];
}
}
}
free(tempSrc);
return 0;
}
// 逆时针90度
int RotationLeft90(unsigned char * src, int srcW, int srcH, int channel)
{
unsigned char * tempSrc = NULL;
int mSize = srcW * srcH * sizeof(char) * channel;
int i = 0;
int j = 0;
int k = 0;
int desW = 0;
int desH = 0;
desW = srcH;
desH = srcW;
tempSrc = (unsigned char *)malloc(sizeof(char) * srcW * srcH * channel);
memcpy(tempSrc, src, mSize);
for(i = 0; i < desH; i ++)
{
for(j = 0; j < desW; j ++)
{
for(k = 0; k < channel; k ++)
{
src[(i * desW + j) * channel + k] = tempSrc[(j * srcW + i) * channel + k];
}
}
}
free(tempSrc);
return 0;
}
// 旋转180度
int RotationDown(unsigned char * src, int srcW, int srcH, int channel)
{
unsigned char * tempSrc = NULL;
int mSize = srcW * srcH * sizeof(char) * channel;
int i = 0;
int j = 0;
int k = 0;
int desW = 0;
int desH = 0;
desW = srcW;
desH = srcH;
tempSrc = (unsigned char *)malloc(sizeof(char) * srcW * srcH * channel);
memcpy(tempSrc, src, mSize);
for(i = 0; i < desH; i ++)
{
for(j = 0; j < desW; j ++)
{
for(k = 0; k < channel; k ++)
{
src[(i * desW + j) * channel + k] = tempSrc[((srcH - 1 - i) * srcW + srcW - 1 - j) * channel + k];
}
}
}
free(tempSrc);
return 0;
}
图像旋转c代码实现(90度, -90度, 180度)
最新推荐文章于 2025-03-12 20:38:31 发布