用opencv打开一个视频并加特效(灰度转换、高斯滤波、canny边缘检测处理)再保存
做这个代码时只在保存转化后的视频时出现了问题,就是保存的avi文件打不开,并且大小很小(所以我怀疑没有写进去)
导致出错的代码
VideoWriter writer("qinshi3.avi", CV_FOURCC('X', 'V', 'I', 'D'), FrameRate, Size(frameWidth, frameHeight));
我怀疑初始化那里没有打开文件,所以没写进去,后来参考了网上的代码,修改如下
writer.open("qinshi3.avi", -1, FrameRate, Size(frameWidth, frameHeight), true);//打开视频文件,准备写入
第一个当然也没有错,但是在此处是不行的,在剪切原视频时它是可以用的。
代码1:用opencv打开一个视频并加特效(灰度转换、高斯滤波、canny边缘检测处理)再保存边缘检测视频
#include <opencv2\opencv.hpp>
#include <cstdio>
using namespace cv;
int main()
{
//【1】读入视频
VideoCapture capture("C:\\Users\\小碗豆\\Downloads\\qinshi2.avi");
string outFlie = "C:\\Users\\小碗豆\\Downloads\\qinshi3.avi";
VideoWriter writer;
// 获取视频相关信息-帧像素宽高
int frameHeight =(int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);
int frameWidth = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);
double FrameRate = capture.get(CV_CAP_PROP_FPS);
//VideoWriter writer("C:\\Users\\小碗豆\\Downloads\\qinshi3.avi", CV_FOURCC('X', 'V', 'I', 'D'), FrameRate, Size(frameWidth, frameHeight));//注意此处视频的尺寸大小要与真实的一致
writer.open(outFlie, -1, FrameRate, Size(frameWidth, frameHeight), true);
//【2】循环显示每一帧
while (1)
{
Mat frame, edges;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame; //读取当前帧
//若视频播放完成,退出循环
if (frame.empty())
{
break;
}else
{
cvtColor(frame, edges, CV_BGR2GRAY);
writer<<edges;
imshow("读取视频", frame); //显示当前帧
waitKey(30); //延时30ms
}
}
capture.release();
writer.release();
return 0;
}
代码2:剪切视频
#include <opencv2\opencv.hpp>
#include <cstdio>
using namespace cv;
int main()
{
//【1】读入视频
VideoCapture capture("C:\\Users\\小碗豆\\Downloads\\qinshi.avi");
// 获取视频相关信息-帧像素宽高
int frameHeight = (int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);
int frameWidth = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);
double FrameRate = capture.get(CV_CAP_PROP_FPS);
VideoWriter writer("C:\\Users\\小碗豆\\Downloads\\ICSIcut.avi", CV_FOURCC('M', 'J', 'P', 'G'), FrameRate, Size(frameWidth, frameHeight));//注意此处视频的尺寸大小要与真实的一致
//【2】循环显示每一帧
int i = 0;
while (1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame; //读取当前帧
i++;
//若视频播放完成,退出循环
if (frame.empty())
{
break;
}
if (i>100 && i < 600)
{
writer << frame;
imshow("读取视频", frame); //显示当前帧
waitKey(30); //延时30ms
}
}
return 0;
}
使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换、高斯滤波、canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存为一个视频avi文件。
#include<opencv2/opencv.hpp>
#include<cv.h> using namespace cv;
using namespace std;int main()
{VideoCapture capture("G:\\avi\\qinshi.avi"); int num = 1;Mat edges,edges2; //定义一个Mat变量,用于存储每一帧的图像 VideoWriter writer;double FrameRate = capture.get(CV_CAP_PROP_FPS);// 获取视频相关信息-帧率// 获取视频相关信息-帧像素宽高 int frameHeight = capture.get(CV_CAP_PROP_FRAME_HEIGHT);int frameWidth = capture.get(CV_CAP_PROP_FRAME_WIDTH);writer.open("VideoOut.avi", -1, FrameRate, Size(frameWidth, frameHeight), true);while (1){Mat frame; //定义一个Mat变量,用于存储每一帧的图像capture >> frame; //读取当前帧 if (frame.empty()){break;}else{Canny(frame, edges2, 0, 30, 3);//边缘化2writer << edges2;//保存if (num == 1) {cvtColor(frame, edges, CV_BGR2GRAY);//彩色转换成灰度num = 2;}else if (num == 2) {GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);//高斯模糊化num = 3;}else if (num == 3) {Canny(edges, edges, 0, 30, 3);//边缘化1num = 1;}Canny(frame, edges2, 0, 30, 3);//边缘化2writer << edges2;imshow("原视频", frame);imshow("三特效视频", edges); //显示当前帧 }waitKey(30); //延时30ms }capture.release();writer.release();return 0;
}
结果
注:编译环境为vs2015.
用opencv打开一个视频并加特效(灰度转换、高斯滤波、canny边缘检测处理)再保存相关推荐
- OpenCV调用摄像头+灰度图+高斯滤波+Canny算子
来把opencv经常要用的一些函数来梳理一下 效果图震楼 惯例opencv配置环境地址:https://blog.csdn.net/aidam_bo/article/details/81132918 ...
- 【OpenCV学习】使用OpenCV打开图片视频
一.使用代码打开一张图片 代码如下: #include <opencv.hpp>int main() {cv::Mat img = cv::imread("D://My Code ...
- Ubuntu下使用opencv打开图片视频
Ubuntu下使用opencv打开图片视频 一.安装opencv 二.配置环境 1.安装完成后,开始配置环境 2.更新系统共享链接库 3.修改bash.bashrc 文件 4.完成后执行命令 三.打开 ...
- python opencv sobel_OpenCV实战(一): Sobel、Laplacian、Canny 边缘检测
简述 OpenCV边缘检测的一般步骤为: 滤波 增强 检测 常用的边缘检测的算子和滤波器有: Sobel算子 Laplacian算子 Canny算子 Scharr滤波器 以下使用Sobel.Lapla ...
- 【无标题】用Qt+OpenCV做一个图像处理软件(灰度化)
初入坑,有问题请指正. 首先,点击菜单栏插入选项,从文件目录中选取一张图片 . 附代码 void MainWindow::on_charu_triggered() {QString filename= ...
- 基于OpenCV打开本地视频/本地USB摄像头/网络IP摄像头
前言 最近进行各种测试,总结下! 预备 首先来一张OpenCV关于VideoCapure的介绍,说明很清楚,能够用来读取.avi视频文件,.jpg格式的图片序列,以及网络摄像头. 程序 程序很简单,不 ...
- 【OpenCV】图像/视频相似度测量PSNR( Peak signal-to-noise ratio) and SSIM,视频/图片转换
目录 1 目标 2 原理 2.1 图像比较 - PSNR and SSIM¶ 3 代码 3.1如何读取一个视频流(摄像头或者视频文件)?¶ 3 运行效果 视频/图片转换: 如何用OpenCV创建一个视 ...
- [Issue Fixed]-不能为虚拟电脑xxx打开一个新任务
使用window host + virtualbox + ubuntu vm的时候,有时候window突然断电关机了.此时重启window电脑后,再次使用virtualbox打开ubuntu vm时, ...
- OpenCV制作一个类“全能扫描王”的简易扫描软件
转自:https://www.cnblogs.com/skyfsm/p/7324346.html 相信很多人手机里都装了个"扫描全能王"APP,平时可以用它来可以扫描一些证件.文本 ...
最新文章
- django引入现有数据库
- Spring MVC 解读——mvc:annotation-driven/
- 开发日记-20190519 关键词 Linux学习路径
- 习题元祖与字典的值交换
- json数据解析_「Flutter实战」22.JSON解析和复杂数据模型转换
- 工程师如何解决穿衣搭配烦恼?
- ubuntu系统中root的2种pip路径
- SAP Data Intelligence Modeler的一些使用截图
- 微软推出免费在线系统诊断工具--不用手动下载
- Cacti Plugin Architecture安装
- android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...
- 公司行政的未来在哪里?要不要转行?
- android for opencv (2) byte[] ,Bitmap 与 Mat 类型转换,Bitmap保存照片
- 阿里云推出全球云网络人才赋能计划,打造云网络认证体系
- lambda函数(配合map函数)以及[x for x in]的超详细解释(实例+原理)
- 感知机-收敛性证明及代码实现
- linux打开chm文件,安装kchmviewer,在linux下查看chm文件
- Gitlab首次首次使用步骤
- 安卓手机云控系统框架源码,PHP+Autojs, ,这套是空框架源码
- 物联网、无线模块和组合模块,具体是什么意思
热门文章
- C语言|鼠标点击开始
- python爬表情包_【从零开始写爬虫一】批量下载表情包
- 图解 802.11wifi协议
- 为知笔记Markdown笔记里的插入代码怎么实现/为知笔记怎怎么插入代码段
- 阿里云天池供应链大赛(一)
- linux有必要清理内存么,Linux系统需要清理垃圾文件和优化系统吗?
- idea 配置文件中的中文与ASCII码互转
- [MOOC]物联网技术笔记-2.物联网的概念和特征
- Flutter 核心编程二:Dart基础语法之基本数据类型,数组,方法,Runs,函数闭包,typedef,操作符
- canvas实现3D魔方