(x0,y0)为原图像上一点,图像水平平移量为tx,垂直平移量为ty,平移后的点为(x1,y1)
x1=x0+tx;y1=y0+ty,转换后x0=x1-tx;y0=y1-ty
这样平移后的图像上的每一点都可以在原图像中找到对应的点,可以根据x0和y0的值,判断原来的点是否在图像中,如果超出了原来图像的范围,就把点(x1,y1)的值设置成0(黑色)和255(白色).
int OriginX;
int OriginY;
for(int i=0;iheight;i++)
{
for(int j=0;jwidth;j++)
{
OriginX=j-m_XOffset;
OriginY=i-m_YOffset;
//if((OriginX>0)&&(OriginXwidth)&&(OriginY>0)&&(OriginYheight))
if(OriginX<0 || OriginY<0)
((uchar *)(tran->imageData+i*tran->widthStep))[j]=0;
else
((uchar *)(tran->imageData+i*tran->widthStep))[j]=((uchar *)(gray->imageData+OriginY*gray->widthStep))[OriginX];
;
}
}
镜像原理
for(int i=0;iheight;i++)
{
for(int j=0;jwidth;j++)
{
OriginX=(gray->width-j);
OriginY=i;
((uchar *)(tran->imageData+i*tran->widthStep))[j]=((uchar *)(gray->imageData+OriginY*gray->widthStep))[OriginX];
}
}
转置,在构建目标图时,要高度值和宽度值进行互换,转换时,目标坐标进行互换!
gray=cvCreateImage(cvSize(plmg->width,plmg->height),IPL_DEPTH_8U,1);
tran=cvCreateImage(cvSize(gray->height,gray->width),IPL_DEPTH_8U,1);
cvCvtColor(plmg,gray,CV_BGR2GRAY);