当前位置: 首页 > news >正文

网站制作建设公司google推广教程

网站制作建设公司,google推广教程,长春有什么好的网站制作公司,个人备案的网站做企业站原理 算法原理可以分为三个流程: 1、将视频(图像)从(顶->底)或(左->右)逐行(列)扫描图像。 2、将扫描完成的行(列)像素重新生成定格图像…

原理

算法原理可以分为三个流程:

1、将视频(图像)从(顶->底)或(左->右)逐行(列)扫描图像。

2、将扫描完成的行(列)像素重新生成定格图像。

3、使用原帧图像像素填充未扫描到的像素。

图像扫描

首先第一步,拿到一个视频(很多帧图像)可以简单的看成图像处理。我们需要将图像从顶到底逐行进行像素扫描,当然也可以从左到右逐列扫描,这要看你想要实现什么样的效果。在这里,我实现的是从上到下逐行扫描。效果如图所示。

 生成定格图像

所谓生成定格图像就是将我们每扫描到的行像素重新进行绘制。

    //从顶向下逐行扫描图像if (h < height){h++;//将扫描到的图像像素进行重新绘制,生成新图像for (int j = 0; j < width; j++){for (int c = 0; c < 3; c++){temp.at<Vec3b>(h, j)[c] = canvas.at<Vec3b>(h, j)[c];}}//绘制扫描过程line(canvas, Point(0, h), Point(width, h), Scalar(255, 255, 0), 2);}

 

 如图所示,这是使用上面代码段实现的逐行扫描生成定格图像。从效果上看,已经得到了我们想要的大致效果了。不过现在的问题是,经扫描到的行有像素填充,未扫描到的行还是漆黑一片。所以接下来我们需要做的就是将未扫描到的行用原图进行填充。具体请看源码注释。

图像混合

//将两幅图像进行线性混合
bool Linear_Blend(Mat src1, Mat src2, Mat& dst)
{/*参数说明:src1:生成的定格图像。由于生成的定格图像是从顶往下逐行扫描,故在扫描线下的像素为0src2:原视频帧图像dst:新生成的定格图像。算法原理:经扫描到的像素用src1进行填充,未扫描到的像素用src2进行填充,这样就可以得到我们所要的效果了。*/for (int i = 0; i < src1.rows; i++){for (int j = 0; j < src1.cols; j++){for (int c = 0; c < 3; c++){if (src1.at<Vec3b>(i, j)[0] != 0){dst.at<Vec3b>(i, j)[c] = src1.at<Vec3b>(i, j)[c];}else{dst.at<Vec3b>(i, j)[c] = src2.at<Vec3b>(i, j)[c];}}}}return true;
}

 效果

 源码

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;/*
抖音特效:蓝线挑战
算法原理:1、将视频(图像)从(顶->底)或(左->右)逐行(列)扫描图像。2、将扫描完成的行(列)像素重新生成定格图像3、使用原帧图像像素填充未扫描到的像素
*///将两幅图像进行线性混合
bool Linear_Blend(Mat src1, Mat src2, Mat& dst)
{/*参数说明:src1:生成的定格图像。由于生成的定格图像是从顶往下逐行扫描,故在扫描线下的像素为0src2:原视频帧图像dst:新生成的定格图像。算法原理:经扫描到的像素用src1进行填充,未扫描到的像素用src2进行填充,这样就可以得到我们所要的效果了。*/for (int i = 0; i < src1.rows; i++){for (int j = 0; j < src1.cols; j++){for (int c = 0; c < 3; c++){if (src1.at<Vec3b>(i, j)[0] != 0){dst.at<Vec3b>(i, j)[c] = src1.at<Vec3b>(i, j)[c];}else{dst.at<Vec3b>(i, j)[c] = src2.at<Vec3b>(i, j)[c];}}}}return true;
}int main()
{VideoCapture capture;capture.open("test.avi");if (!capture.isOpened()){cout << "can not open the camera!" << endl;system("pause");return -1;}int width = capture.get(CAP_PROP_FRAME_WIDTH);//视频帧宽int height = capture.get(CAP_PROP_FRAME_HEIGHT);//视频帧高//保存视频VideoWriter writer;int fourcc = writer.fourcc('m', 'p', '4', 'v'); //视频编码Size size(capture.get(CAP_PROP_FRAME_WIDTH), capture.get(CAP_PROP_FRAME_HEIGHT));writer.open("result.avi", fourcc, 30, size, true);int h = 0;//定义变量,代表当前扫描高度//用于生成定格照Mat temp = Mat::zeros(Size(width, height), CV_8UC3);Mat frame;while (capture.read(frame)){//将图像拷贝一份,用于每帧更新Mat canvas = frame.clone();//从顶向下逐行扫描图像if (h < height){h++;//将扫描到的图像像素进行重新绘制,生成新图像for (int j = 0; j < width; j++){for (int c = 0; c < 3; c++){temp.at<Vec3b>(h, j)[c] = canvas.at<Vec3b>(h, j)[c];}}//绘制扫描过程line(canvas, Point(0, h), Point(width, h), Scalar(255, 255, 0), 2);}Mat result = Mat::zeros(frame.size(), frame.type());//蓝线挑战最终定格图Linear_Blend(temp, canvas, result); //将两张图像进行像素叠加//writer.write(temp);//进行视频保存imshow("定格图像", temp);imshow("原视频帧", canvas);imshow("蓝线挑战", result);char key = waitKey(10);if (key == 27) break;}capture.release();system("pause");return 0;
}

http://www.dt0577.cn/news/17797.html

相关文章:

  • 百度文章收录提交入口站长工具seo推广秒收录
  • 微商商城系统怎么卸载windows优化大师
  • 江阴外贸网站制作搜索引擎营销方案
  • 网站建设情况说明书新闻发稿软文推广
  • 怎么自己做直播网站吗seo管理是什么
  • 外贸网站建设浩森宇特免费私人网站建设平台
  • 网站内容搜索今天发生了什么重大新闻
  • 北京网站建设unitewwwseo网络优化专员是什么意思
  • 大连网站建设dl zw公司关键词排名优化
  • 建行网站南宁求介绍seo软件
  • 网站建设 客户评价青岛谷歌优化
  • 镇网站制作价格网络营销策划的概念
  • 网站管理教程网站的优化与推广分析
  • 如何提升网站收录网络营销心得体会800字
  • 59网一起做网站微信推广文案
  • aspcms上传到虚拟主机后打开网站搜索引擎营销成功案例
  • wordpress标题省略天津搜索引擎seo
  • 网站建设客服与客户的对话住房和城乡建设部官网
  • 做外贸网站怎么访问外国网站莆田百度快照优化
  • 企业网站怎么做html简单网页设计作品
  • 上海招聘网官方网站广告投放代理商加盟
  • 网站搭建排名优化网络营销策略研究论文
  • 易橙云做的网站怎么样百度人工申诉客服电话
  • 徐汇网站推广搜索引擎优化是什么?
  • 南京网站设公司中国万网
  • 网站ftp做网站的会给嘛手机百度免费下载
  • 扬中网站制作公司最新的新闻 今天
  • 怎么做网站设查权重的软件
  • 网络公司网站建设首页重庆关键词优化服务
  • 做网站公司需要帮客户承担广告法吗百度电话怎么转人工