Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图像特效显示(下)

图像特效显示(下)

作者头像
周旋
发布于 2022-08-07 04:15:06
发布于 2022-08-07 04:15:06
1.1K00
代码可运行
举报
文章被收录于专栏:行走的机械人行走的机械人
运行总次数:0
代码可运行

图像特效显示(上)

上篇文讲了图像特效显示之扫描显示,图像渐显与马赛克显示。本文继续。

图像的平移

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//移动显示
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);
}

动图

中间扩张

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//中间扩张
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);
}

动图

水平栅条特效

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//水平栅条特效
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);
}

动图

THE END

图像特效显示就到这儿了,比较简单,也没太大实际用途,主要是增强一下对图像操作的熟练度。

下篇更【图像灰度变换】,包括手写二值化与阈值处理,灰度线性,分段线性变换,非线性变换以及直方图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周旋机器视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图像特效显示(上)
准备11月份更一个新的系列,之前看的杨淑莹老师的《数字图像处理Visual Studio C++技术实现》,里面的代码都没来得及打,而且其是基于自定义的图像类实现的,这个系列就把所有例程移植为opencv-C++实现,也就是算法逻辑用C++实现,图像对象使用opencv自带的图像类。
周旋
2022/08/07
1.2K0
图像特效显示(上)
OpenCV图片动态特效显示(四)-- 中间扩张和栅格显示效果
今天这篇是使用OpenCV实现特效显示的最后一篇,主要是看看中间扩张和栅格显示。文章的最后我会把这一系列的源码放到GithHub上。
Vaccae
2020/12/17
1.2K0
OpenCV图片动态特效显示(四)-- 中间扩张和栅格显示效果
【走进OpenCV】重映射与仿射变换
其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的。
小白学视觉
2019/10/24
1.2K0
降龙算法1:图像的基本数据格式(8K字)
开始更新降龙算法系列了。因为停更近半年了,所以先啰嗦几句话交代一下这个系列的前因后果:
周旋
2023/01/30
5660
OpenCV项目(18)|图像对比度亮度调整
应用:实际开发项目时,利用改变对比度和亮度的方法,实现光照不均匀的干扰。 代码: #include "opencv2/core/utility.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" #include <iostream> using namespace cv; using namespace std; Mat srcImage, dstIm
用户9831583
2022/06/16
5730
OpenCV项目(18)|图像对比度亮度调整
如何对图像进行卷积操作[通俗易懂]
2、卷积操作:卷积核与原图对应位置相乘再求和;然后将所求和放在被卷积操作的图中心位置。
全栈程序员站长
2022/08/26
3K0
如何对图像进行卷积操作[通俗易懂]
OpenCV图片动态特效显示(三)-- 平移显示及拉伸显示效果
前两篇的特效已经实现了展开、渐显及马赛克的实现,今天来实现图像的平移效果及通过显示窗体的函数改造展开显示的代码实现拉伸效果。
Vaccae
2020/12/03
1.9K0
OpenCV图片动态特效显示(三)-- 平移显示及拉伸显示效果
OpenCV 几何变换-图像镜像
图像镜像是图像基本的几何变换之一,实现起来也很简单,先贴上源码: #include <opencv/highgui.h> #include <time.h> #include <opencv2
chaibubble
2018/01/02
8860
OpenCV 几何变换-图像镜像
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
  图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系,以及映射过程中的变化参数。图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:
vv彭
2020/10/27
4K0
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换
    


OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
【手撕算法】opencv实现走迷宫算法
本文利用opencv实现了深度优先搜索DFS和广度优先搜索BFS两个算法来走迷宫,迷宫也是用opencv+鼠标画的。
threeQing
2021/09/29
8030
【手撕算法】opencv实现走迷宫算法
理解图像卷积操作的意义
卷积一词最开始出现在信号与线性系统中,信号与线性系统中讨论的就是信号经过一个线性系统以后发生的变化。由于现实情况中常常是一个信号前一时刻的输出影响着这一时刻的输出,所在一般利用系统的单位响应与系统的输入求卷积,以求得系统的输出信号(当然要求这个系统是线性时不变的)。 卷积的定义: 卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列x(n)和h(n),则卷积的结果:
全栈程序员站长
2022/09/01
1K0
【手撕算法】基于队列实现的区域增长分割算法
上一篇介绍了深度搜索DFS和广度搜索BFS两个算法,本文就是基于BFS算法实现的区域增长算法。
周旋
2022/08/07
7380
【手撕算法】基于队列实现的区域增长分割算法
C++实现卷积操作
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140281.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
7040
【opencv实践】图像增强基本操作
上面这幅黑乎乎的图就是我们今天要处理的图片,这是书的一页,但特别特别黑,对于这种因为阴影而导致的细节缺失,我们就可以尝试对其进行图像增强了。
周旋
2020/06/04
6970
聊一聊OpenCV的saturate_cast防溢出
本文介绍了OpenCV中的saturate_cast函数的作用和原理,该函数用于将一个整型值转换为CV_8UC1格式的Mat,并处理溢出情况。在具体应用中,该函数可以用于对图像进行灰度变换、滤波等操作。在处理边界溢出的情况时,该函数使用了一种巧妙的算法,将边界上的像素值进行特殊处理,避免了图像失真等问题。
chaibubble
2018/01/02
2.2K0
聊一聊OpenCV的saturate_cast防溢出
二寸照片识别/切边/矫正
大体思路可以描述为Canny边缘检测-形态学闭操作-轮廓检测-Hough直线检测-确定四个角点-透视变换。
周旋
2020/08/11
1.5K0
OpenCV源码系列|图像叠加
周末收到小伙伴来信: 于是总结了几种图像叠加的方法参考学习。 1,copyTo int main() { Mat x = imread("1.jpeg"); Mat y = imread("2.png"); Mat ROIx = x(Rect(10, 5, y.cols, y.rows)); y.copyTo(ROIx); imshow("x", x); waitKey(0); mask(x,y); return 0; } 效果: 2,co
用户9831583
2022/06/16
5150
OpenCV源码系列|图像叠加
【对二寸照片的摧残】一:人脸马赛克
前两天在CSDN刷到个上首页推荐的利用python进行二寸照片换底色的博文,然后看着我丑不拉几(帅出天际)的二寸平头小照片,我也忍不住了。
周旋
2020/08/11
6710
【OpenCV入门之十三】如何在ROI中添加Logo
它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域。
小白学视觉
2019/05/30
1.7K0
OpenCV mat类实现水平投影和垂直投影
图像经过灰度化和otsu阈值分割,分别绘制水平和垂直投影 #include<iostream> #include <cv.h> #include <highgui.h> #include <cvaux.h> #include <tchar.h> using namespace std ; using namespace cv ; int main() { //原图 Mat srcImage=imread("test.png"); imshow("原图",srcImage
chaibubble
2022/05/07
7730
OpenCV mat类实现水平投影和垂直投影
推荐阅读
相关推荐
图像特效显示(上)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验