图像平移是最基本的图像几何变换,楼主采用双线性插值算法实现级的图像平移。
void TranslateTransform(Mat& src, Mat& dst, double dx, double dy, uchar FillValue = 0) ///图像的平移变换
{
CV_Assert(src.depth() == CV_8U);
const int Rows = src.rows;
const int Cols = src.cols;
dst.create(Rows, Cols, src.type());
int tempj = 0, tempy = 0;
///--------像素级平移-----------------
if ((dx - (int)dx) == 0 && (dy - (int)dy)== 0 )
{
int y,x;
for (int i = 0; i < Rows; i++)
{
x = i - dx; ///平移后坐标映射到原图像,x行
if (x >= 0 && x < Rows) ///保证映射后的坐标在原图像行范围内
{
uchar* srcdata = src.ptr<uchar>(x);
uchar* dstdata = dst.ptr<uchar>(i);
for (int j = 0; j < Cols; j++)
{
y = j - dy; //平移后坐标映射到原图像,y列
tempj = 3 * j; 彩色图像横坐标的位置
tempy = 3 * y;
if ( y >=