学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为2927,预计阅读8分钟

前言

前两篇的特效已经实现了展开、渐显及马赛克的实现,今天来实现图像的平移效果及通过显示窗体的函数改造展开显示的代码实现拉伸效果。

实现效果

上图中可以看到,就是使用平移实现的效果,其实这个和我们第一章的显示不同就在于,我们展开的显示,垂直方向全是从上到下的显示,只不过先显示头部还是底部,同理从左到右,和从右到左也是全部从左边开始显示。

平移显示

微卡智享

平移显示的原理也比较简单,就是每显示一行,所以复制的行数就多增加一行。

核心代码

//平移显示
//参数:Mat 源图像,
//      width图像宽度,
//      height图像高度
//      direction方向 0-从上到下  1-从下到上  2-从左到右  3-从右到左
void translationshow(Mat src, int width, int height, int direction)
{Mat dst = Mat(src.size(), CV_8UC3);if (direction == 0) {for (int i = 1; i < height; ++i) {src(Rect(0, height - i, width, i)).copyTo(dst(Rect(0, 0, width, i)));imshow("translationshow0", dst);waitKey(1);}}else if (direction == 1) {for (int i = 1; i < height; ++i) {src(Rect(0, 0, width, i)).copyTo(dst(Rect(0, height - i, width, i)));imshow("translationshow1", dst);waitKey(1);}}else if (direction == 2) {for (int i = 1; i < width; ++i) {src(Rect(width - i, 0, i, height)).copyTo(dst(Rect(0, 0, i, height)));imshow("translationshow2", dst);waitKey(1);}}else if (direction == 3) {for (int i = 1; i < width; ++i) {src(Rect(0, 0, i, height)).copyTo(dst(Rect(width - i, 0, i, height)));imshow("translationshow3", dst);waitKey(1);}}waitKey(0);
}

线程调用

  //平移显示future<void> fttranslation0 = async(launch::async, translationshow, src, src.cols, src.rows, 0);future<void> fttranslation1 = async(launch::async, translationshow, src, src.cols, src.rows, 1);future<void> fttranslation2 = async(launch::async, translationshow, src, src.cols, src.rows, 2);future<void> fttranslation3 = async(launch::async, translationshow, src, src.cols, src.rows, 3);

通过上面的方式就可以直接实现开头GIF动画的样子了。

窗口位置显示

微卡智享

前面两章动画时我们imshow的显示位置在过程一中还要自己手动鼠标点一下,这次我在单元里又封装了一个给显示图片窗体定位的函数。

窗体定位代码

//显示窗口设置
//参数  img 显示的图像源,
//      winname 显示的窗口名称,
//      pointx  显示的坐标x
//      pointy  显示的坐标y
void setshowwindow(Mat img, string winname, int pointx, int pointy)
{//设置显示窗口namedWindow(winname, WindowFlags::WINDOW_NORMAL);//设置图像显示大小resizeWindow(winname, img.size());//设置图像显示位置moveWindow(winname, pointx, pointy);
}

在我们显示的前加入窗体定位的调用后,就实现的位置的方式。而用上面窗体位置显示的函数放在我们第一篇展开显示的代码中,就会展现出拉伸的显示效果。

我们来改造一下展开显示的代码:

原来的显示代码最后加入一个是否用窗体控制的参数,如果是true就调用setshowwindow的方法。

完整改造后代码

//垂直方向显示   direction 0-从上到下  1-从下到上 2-从左向右  3-从右向左
void directionshow(Mat src, int width, int height, int direction, bool windowflag) {Mat tmpsrc, dst;if (direction == 0) {if(windowflag) setshowwindow(src, "direction0", 1, 100);for (int i = 1; i < height; i++) {tmpsrc = src(Rect(0, 0, width, i));tmpsrc.copyTo(dst);imshow("direction0", dst);waitKey(1);}}else if (direction == 1) {if (windowflag) setshowwindow(src, "direction1", src.cols + 1, 100);for (int i = 1; i < height; ++i) {tmpsrc = src(Rect(0, height- i, width, i));tmpsrc.copyTo(dst);imshow("direction1", dst);waitKey(1);}}else if (direction == 2) {if (windowflag) setshowwindow(src, "direction2", src.cols * 2 + 1, 100);for (int i = 1; i < width; ++i) {tmpsrc = src(Rect(0, 0, i, height));tmpsrc.copyTo(dst);imshow("direction2", dst);waitKey(1);}}else {if (windowflag) setshowwindow(src, "direction3", src.cols * 3 + 1, 100);for (int i = width - 1; i > 1; --i) {tmpsrc = src(Rect(i, 0, width - i, height));tmpsrc.copyTo(dst);imshow("direction3", dst);waitKey(1);}}cout << "over" << direction << endl;waitKey(0);
}

实现效果

扫描二维码

获取更多精彩

微卡智享

「 往期文章 」

OpenCV图片动态特效显示(二)--渐显和马赛克显示

OpenCV图片动态特效显示(一)--展开显示

OpenCV实现图像转换为素描效果

OpenCV图片动态特效显示(三)-- 平移显示及拉伸显示效果相关推荐

  1. opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍

    本文来自于段力辉 译<OpenCV-Python 中文教程> 文章目录 一.图片 + 读入.显示.写出 1.cv2.imread() 2.cv2.imshow() 3.cv2.imwrit ...

  2. antdesign图片点击放大_点击图片放大特效代码,全屏显示,再点击恢复原状【多种方法】...

    我们先来看看效果如何,点击图片试一试. 图片的实际大小为1920x1080,我们先把宽度限制在300px,点击后图片还原到100%(如果浏览器窗口高度小于图片的真实高度,这样的情况下,图片虽然宽度还原 ...

  3. python图片动态特效_python实现图片的抖音效果

    (本篇文章来自小编博客 本篇文章将说一下如何使用python将普通图片处理成抖音效果,甚至制作gif动图. 1. 基本原理 Sketch练习稿之绘制抖音音符 中讲述了抖音效果的原理,领域内可能有人称这 ...

  4. 一机三屏台式计算机,如何组建三屏显示

    三.如何组建三屏显示 三屏显示的接口插接方式 组建三屏显示首先需要显卡支持Eyefinity多屏显示技术,其次最少还需要一个Diplay Port接口以及两个DVI接口,而显示器方面其中一个必须配备D ...

  5. OpenCV学习笔记之 ( 三 ) MFC显示Mat图片

    以下步骤参考以下链接 http://blog.csdn.net/dcrmg/article/details/51913160 原理及详解见上链接. 下面只讲步骤. 一.打开VS2010,建立对话框的项 ...

  6. TensorFlow与OpenCV,读取图片,进行简单操作并显示

    本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonO ...

  7. OpenCV中的GUI特性 —— 图片与视频的读写和显示

    OpenCV中的GUI特性--图片与视频的读写和显示 在这一部分我们将介绍在OpenCV中的GUI特性之图片和视频的读写和显示,包括图像的cv.imread / imshow / imwrite和Vi ...

  8. radio切换控制div显示_JavaScript连载31图片动态切换以及关闭图片案例

    一.图标切换 31.1 点击那两个按钮可以做到轮番显示图片 二.关闭图片案例 31.2 点击右上角的叉,图片会消失. 三.源码: D31_iconSwitch.html D31_2_CloseImag ...

  9. 第三篇:动态 8位数码管显示---亚龙236电路

    第三篇:动态8位数码管显示 -亚龙236电路 上一篇中已经实现了数码管的静态显示,如果按照上一篇的思路89s52芯片最多可以驱动4位数码管.这一节我们来看看其它显示更多位数的方案. 目前最常用的是 5 ...

最新文章

  1. BOM--location对象、history对象
  2. 【干货】系统管理员必备,服务器监控工具汇总
  3. html5 canvas图片渐变
  4. sort+参数+linux,linux sort下令参数及用法详解
  5. c++ 多核cpu序列号_关于 CPU 的一些基本知识总结
  6. HTML+CSS+JS实现 ❤️Three碎片化图片切换❤️
  7. [转载] java简易爬虫Crawler
  8. Could not load file or assembly 'MagickNet.dll'
  9. 区块链软件公司:智媒链在数据分析和开发应用场景
  10. android设备连接工具箱,ADB工具连接Android手机
  11. 二维otsu算法python_图像二值化与otsu算法介绍
  12. Eclipse下载安装配置测试(超详细)
  13. docker的离线安装方法和网络源安装方法、内网环境linux脚本批量安装docker、安装docker-compose
  14. 五笔字形字根及难字拆分
  15. 分布式 Git - 为项目做贡献
  16. Object-Oriented Programming Summary Ⅱ
  17. 停车场反向寻车实现方法和算法
  18. 不习惯的 Vue3 起步六 の Echarts绘制下钻地图
  19. Windows 10找回高性能模式和节能模式
  20. PR 2020 关于驱动程序更新

热门文章

  1. 好用到爆!分享这几个Python内置模块!
  2. HTML怎么让文本在一个div上下左右居中呢?
  3. asp.net小学生学籍管理系统
  4. 简述用决策表设计测试用例的步骤_决策表设计测试用例的步骤(流程)?
  5. [C程序设计]设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球面积、圆柱体积。
  6. 新品发布 | 信驰达发布基于Nordic nRF52833的BLE模块RF-BM-ND10
  7. 海口计算机中专学院,海口市第一职业中学专业_2021年海口市第一职业中学招生专业_中专专业_2020年技校专业_技校网...
  8. 微型计算机原理测试题,微机原理练习题
  9. web网页设计期末课程大作业 HTML+CSS+JavaScript仿天猫购物商城设计实例 企业网站制作
  10. mt6589+android+4.4,MT6589T四核/评测总结_小米 红米_手机Android频道-中关村在线