在OpenCV1.0环境下写的图像平移函数(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
相关文章
- C++11:移动构造函数的测试
- C++指针的概念解读[超详细]
- [工具] 将Sublime Text 3配置为C++代码编辑器
- C++中的对象初始化
- [转] C++ try catch() throw 异常处理
- paip.指针 引用 c++ java的使用总结.
- 用C++的QT写一个能够实现TCP和UDP通信的网络调试助手代码
- 华为OD机试真题目录汇总 C++ 代码解答版
- C++关于二进制位操作小结
- C++11常用新特性快速一览
- [手游新项目历程]第6天-二进制值和十六进制字符串相互转换的C++代码
- 【华为OD机试 2023最新 】 查找重复代码(C++ 100%)
- 腾讯 C++ 笔试/面试题及答案
- Ubuntu20.04下,qt交叉编译报错::15: warning: identifier ‘nullptr‘ is a keyword in C++11 [-Wc++0x-compat]
- c++本地动态连接库代码
- webrtc Native C++ 音视频实时开关,码率/帧率实时调控,分辨率调整,音量大小调节
- 基于visual c++之windows核心编程代码分析(30)Telnet协议编程
- C++特性之智能指针shared_ptr
- C/C++学习笔记七
- C++搭建集群聊天室(三):配置远程代码编辑神器 VScode
- C++学习第五节:C和C++的区别第三节课
- 【C++要笑着学】从零开始实现日期类 | 体会代码的复用 | 提供完整代码
- 使用Dependency Walker和dumpbin工具定位C++软件启动时找不到接口的报错问题
- C++链接库的使用,二维向量,三维向量,Ubuntu下C++测试向量库