温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++怎么实现图像的平移

发布时间:2022-01-04 10:03:27 来源:亿速云 阅读:447 作者:iii 栏目:大数据

本篇内容主要讲解“C++怎么实现图像的平移”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现图像的平移”吧!

图像的平移

移动是将图像看作一个整体,显示时不能像扫描那样,扫描方式有些像打开一副画,例如显示上部分的时候,下部分可以不现实,而移动则可以看成一块木板画,显示时必须按物理顺序进行,例如从上向下平移时,必须先显示下面的图像,后显示上面的图像,因此平移的算法比扫描难一些。

平移是一复制的方法显示图像的,每显示一次,复制的行数就增加一行,直至显示完成。

//移动显示void Mobile_display(){  //读取图片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = Mat(srcImage.size(), CV_8UC3);  imshow("原图", srcImage);  //定义变量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  namedWindow("移动显示");  for (int i = 1; i < ImageWidth; i++) {//步长为1    roiImage = srcImage(Rect(ImageWidth-i, 0, i, ImageHeigth));    roiImage.copyTo(dstImage(Rect(0, 0, i, ImageHeigth)));    imshow("移动显示", dstImage);    waitKey(5);  }  waitKey(0);}

动图

C++怎么实现图像的平移

中间扩张
     

当我们打开电视机时,都有这样的感觉:电视图像是从屏幕中间开始,向上下两个方向展开的,这种效果就是中间扩张。中间扩张特效显示的原理其实并不难,在显示的时候,先将图像分成两部分,将中间分界处显示在屏幕中央,并快速向上向下扫描图像,最后将图像完整的显示在屏幕上,这样人们因为视觉生理的特点就会看到中间扩张的效果。

//中间扩张void Middle_expansion(){  //读取图片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = Mat(srcImage.size(), CV_8UC3);  imshow("原图", srcImage);  //定义变量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  namedWindow("中间扩张");  for (int i = 1; i <= ImageHeigth/2; i++) {//步长为1    roiImage = srcImage(Rect(0, ImageHeigth / 2 - i, ImageWidth, i));    roiImage.copyTo(dstImage(Rect(0, ImageHeigth / 2 - i, ImageWidth, i)));    roiImage = srcImage(Rect(0, ImageHeigth / 2, ImageWidth, i));    roiImage.copyTo(dstImage(Rect(0, ImageHeigth / 2, ImageWidth, i)));
   imshow("中间扩张", dstImage);    waitKey(5);  }  waitKey(0);}

动图C++怎么实现图像的平移

水平栅条特效
     

栅条特效分为水平栅条和垂直栅条,其效果如同将两手交叉的过程,栅条显示的原理是先将图像分为若干行,将奇数行组成一组,偶数行组成一组,在显示时奇数行从右向左平移,偶数行从左向右平移。

//水平栅条特效void Grid_effect(){  //读取图片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = Mat(srcImage.size(), CV_8UC3);  imshow("原图", srcImage);  //定义变量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  int step=10;//每个栅格宽度  namedWindow("中间扩张");  for (int i = 1; i < ImageWidth+1; i=i+10) {//步长为1    for (int j = 0; j < ImageHeigth; j=j+2*step) {//步长为1      //奇数行从右往左      roiImage = srcImage(Rect(0, j, i, step));      roiImage.copyTo(dstImage(Rect(ImageWidth - i, j, i, step)));      //偶数行从左往右      int k = j + step;      roiImage = srcImage(Rect(ImageWidth - i, k, i, step));      roiImage.copyTo(dstImage(Rect(0, k, i, step)));
     imshow("中间扩张", dstImage);      waitKey(1);    }  }  waitKey(0);}

动图

C++怎么实现图像的平移

到此,相信大家对“C++怎么实现图像的平移”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI