图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601
图像平移的概念就不用多说了,直接上在OpenCV1.0环境下写的图像平移函数(C/C++代码)
#include <opencv2/opencv.hpp>
#include <opencv2/legacy/compat.hpp>
#include <fstream>
using namespace std;
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
//该函数的功能是实现图像的平移
//规定向下、向右为(正,正)
IplImage *moveImage(IplImage *src,int h0,int w0)
{
int h=h0;
int w=w0;
int imageHeight=src->height;
int imageWidth=src->width;
int i,j;
CvScalar sTemp;
IplImage *dst=cvCloneImage(src);
cvSetZero(dst);
if (h>=0 && w>=0)
{
//
for (i=0;i<imageHeight-h;i++)
{
for (j=0;j<imageWidth-w;j++)
{
sTemp=cvGet2D(src,i,j);
cvSet2D(dst,i+h,j+w,sTemp);
}
}
}
else if (h<0 && w>=0)
{
for (i=-h;i<imageHeight;i++)
{
for (j=0;j<imageWidth-w;j++)
{
sTemp=cvGet2D(src,i,j);
cvSet2D(dst,i+h,j+w,sTemp);
}
}
}
else if (h>=0 && w<0)
{
//
for (i=0;i<imageHeight-h;i++)
{
for (j=-w;j<imageWidth;j++)
{
sTemp=cvGet2D(src,i,j);
cvSet2D(dst,i+h,j+w,sTemp);
}
}
}
else if (h<0 && w<0)
{
for (i=-h;i<imageHeight;i++)
{
for (j=-w;j<imageWidth;j++)
{
sTemp=cvGet2D(src,i,j);
cvSet2D(dst,i+h,j+w,sTemp);
}
}
}
else
{
printf("cannot move!");
dst=cvCloneImage(src);
}
return dst;
}
int main(void)
{
IplImage* pImg; //声明IplImage指针
IplImage* pImgAfterMove;
pImg=cvLoadImage("lena.jpg");
pImgAfterMove=cvCloneImage(pImg);
cvSetZero(pImgAfterMove);
pImgAfterMove=moveImage(pImg,100,-100);
cvNamedWindow("原图像",CV_WINDOW_AUTOSIZE);
cvShowImage("原图像",pImg );
cvNamedWindow("平移之后的图像",CV_WINDOW_AUTOSIZE);
cvShowImage("平移之后的图像",pImgAfterMove);
cvWaitKey(0); //等待按键
cvDestroyWindow( "原图像" );//销毁窗口
cvDestroyWindow( "平移之后的图像" );
cvReleaseImage( &pImg ); //释放图像
cvReleaseImage( &pImgAfterMove );
return 0;
}
程序运行结果如下图所示:
上面代码的平移会改变原图像的大小,如果不想改变的图像,可以参考 http://www.cnblogs.com/wangguchangqing/p/4039095.html 中的源码进行相应代码的修改!
图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601