zl程序教程

您现在的位置是:首页 >  后端

当前栏目

在OpenCV1.0环境下写的图像平移函数(C/C++代码)

C++代码 函数 环境 图像 平移
2023-09-11 14:15:39 时间

图像处理开发需求、图像处理接私活挣零花钱,请加微信/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