做这个代码时只在保存转化后的视频时出现了问题,就是保存的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边缘检测处理)再保存相关推荐

  1. OpenCV调用摄像头+灰度图+高斯滤波+Canny算子

    来把opencv经常要用的一些函数来梳理一下 效果图震楼 惯例opencv配置环境地址:https://blog.csdn.net/aidam_bo/article/details/81132918 ...

  2. 【OpenCV学习】使用OpenCV打开图片视频

    一.使用代码打开一张图片 代码如下: #include <opencv.hpp>int main() {cv::Mat img = cv::imread("D://My Code ...

  3. Ubuntu下使用opencv打开图片视频

    Ubuntu下使用opencv打开图片视频 一.安装opencv 二.配置环境 1.安装完成后,开始配置环境 2.更新系统共享链接库 3.修改bash.bashrc 文件 4.完成后执行命令 三.打开 ...

  4. python opencv sobel_OpenCV实战(一): Sobel、Laplacian、Canny 边缘检测

    简述 OpenCV边缘检测的一般步骤为: 滤波 增强 检测 常用的边缘检测的算子和滤波器有: Sobel算子 Laplacian算子 Canny算子 Scharr滤波器 以下使用Sobel.Lapla ...

  5. 【无标题】用Qt+OpenCV做一个图像处理软件(灰度化)

    初入坑,有问题请指正. 首先,点击菜单栏插入选项,从文件目录中选取一张图片 . 附代码 void MainWindow::on_charu_triggered() {QString filename= ...

  6. 基于OpenCV打开本地视频/本地USB摄像头/网络IP摄像头

    前言 最近进行各种测试,总结下! 预备 首先来一张OpenCV关于VideoCapure的介绍,说明很清楚,能够用来读取.avi视频文件,.jpg格式的图片序列,以及网络摄像头. 程序 程序很简单,不 ...

  7. 【OpenCV】图像/视频相似度测量PSNR( Peak signal-to-noise ratio) and SSIM,视频/图片转换

    目录 1 目标 2 原理 2.1 图像比较 - PSNR and SSIM¶ 3 代码 3.1如何读取一个视频流(摄像头或者视频文件)?¶ 3 运行效果 视频/图片转换: 如何用OpenCV创建一个视 ...

  8. [Issue Fixed]-不能为虚拟电脑xxx打开一个新任务

    使用window host + virtualbox + ubuntu vm的时候,有时候window突然断电关机了.此时重启window电脑后,再次使用virtualbox打开ubuntu vm时, ...

  9. OpenCV制作一个类“全能扫描王”的简易扫描软件

    转自:https://www.cnblogs.com/skyfsm/p/7324346.html 相信很多人手机里都装了个"扫描全能王"APP,平时可以用它来可以扫描一些证件.文本 ...

最新文章

  1. django引入现有数据库
  2. Spring MVC 解读——mvc:annotation-driven/
  3. 开发日记-20190519 关键词 Linux学习路径
  4. 习题元祖与字典的值交换
  5. json数据解析_「Flutter实战」22.JSON解析和复杂数据模型转换
  6. 工程师如何解决穿衣搭配烦恼?
  7. ubuntu系统中root的2种pip路径
  8. SAP Data Intelligence Modeler的一些使用截图
  9. 微软推出免费在线系统诊断工具--不用手动下载
  10. Cacti Plugin Architecture安装
  11. android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...
  12. 公司行政的未来在哪里?要不要转行?
  13. android for opencv (2) byte[] ,Bitmap 与 Mat 类型转换,Bitmap保存照片
  14. 阿里云推出全球云网络人才赋能计划,打造云网络认证体系
  15. lambda函数(配合map函数)以及[x for x in]的超详细解释(实例+原理)
  16. 感知机-收敛性证明及代码实现
  17. linux打开chm文件,安装kchmviewer,在linux下查看chm文件
  18. Gitlab首次首次使用步骤
  19. 安卓手机云控系统框架源码,PHP+Autojs, ,这套是空框架源码
  20. 物联网、无线模块和组合模块,具体是什么意思

热门文章

  1. C语言|鼠标点击开始
  2. python爬表情包_【从零开始写爬虫一】批量下载表情包
  3. 图解 802.11wifi协议
  4. 为知笔记Markdown笔记里的插入代码怎么实现/为知笔记怎怎么插入代码段
  5. 阿里云天池供应链大赛(一)
  6. linux有必要清理内存么,Linux系统需要清理垃圾文件和优化系统吗?
  7. idea 配置文件中的中文与ASCII码互转
  8. [MOOC]物联网技术笔记-2.物联网的概念和特征
  9. Flutter 核心编程二:Dart基础语法之基本数据类型,数组,方法,Runs,函数闭包,typedef,操作符
  10. canvas实现3D魔方