C++怎么实现图像特效显示

发布时间:2022-01-04 10:02:34 作者:iii
来源:亿速云 阅读:299

本篇内容介绍了“C++怎么实现图像特效显示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

图像扫描显示

向下扫描就是对图像进行分块并延时显示。

可以通过不断的改变显示的roi区域来达到扫描的效果:

void scanning_down(){  //读取图片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  imshow("原图", srcImage);  //定义变量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  namedWindow("向下扫描");  for (int i = 1; i < ImageHeigth; i++) {//步长为1    roiImage = srcImage(Rect(0, 0, ImageWidth, i));    roiImage.copyTo(dstImage);    imshow("向下扫描", dstImage);    waitKey(5);  }  waitKey(0);}

动图

C++怎么实现图像特效显示

向上,向左,向右扫描显示同理。

图像渐显
     

图像渐显思路是先记录下图像每个像素点的像素值,显示的时候先将屏幕置黑,将循环显示图像n次,n依次为0,1,2,...,256。每一次显示像素值的n/256倍,从而达到渐显的效果。

void fade_in()//淡入{  //读取图片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = srcImage.clone();  imshow("原图", srcImage);  //定义变量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols * 3;  namedWindow("图像渐显");  for (int n = 1; n < 256; n++) {    for (int i = 0; i < ImageHeigth; i++) {      uchar* data1 = srcImage.ptr<uchar>(i);      uchar* data2 = dstImage.ptr<uchar>(i);      for (int j = 0; j < ImageWidth; j++) {        data2[j] = data1[j] * n / 256;
     }    }    imshow("图像渐显", dstImage);    waitKey(10);  }}

动图

C++怎么实现图像特效显示

马赛克显示
     

马赛克显示是将图片分为固定大小的小块,并记录下所有小块的左上角坐标,然后随机将这些小块显示出来,就是马赛克效果。

//图像马赛克显示void mosaic() {  //读取图片  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("图像马赛克显示");  //存储每个小块的首地址并随机打乱  int step =24;//定义马赛克边长(正方形)  vector<Point2d> temp;  unsigned int mi = 0;  //for循环存储所有节点坐标  for (int x = 0; x < ImageWidth; x = x + step) {    for (int y = 0; y < ImageHeigth; y = y + step) {      if (x > ImageWidth - step) {        x = ImageWidth - step;      }      if (y > ImageHeigth - step) {        y = ImageHeigth - step;      }      temp.push_back(Point2d(x,y));      mi++;    }  }    random_shuffle(temp.begin(), temp.end());//打乱容器内元素  //for循环显示每个随机马赛克  for (int i = 0; i < mi; i++) {    srcImage(Rect(temp[i].x, temp[i].y, step, step)).copyTo(dstImage(Rect(temp[i].x, temp[i].y, step, step)));    imshow("图像马赛克显示", dstImage);    waitKey(1);  }  waitKey(0);}

动图

C++怎么实现图像特效显示


“C++怎么实现图像特效显示”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. c++如何实现递归
  2. C++怎么实现栈

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

c++

上一篇:linux如何查看文件前几行

下一篇:JS的script标签属性有哪些

相关阅读

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

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