opencv两视频合并

opencv两视频合并

实现两视频合并功能。

代码

mergeVideoo.cpp :

#include <iostream>

#include <opencv2/opencv.hpp>

#include <unistd.h>

#include <error.h>

#include <errno.h>

#include <fcntl.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <pthread.h>

#include <linux/videodev2.h>

#include <sys/mman.h>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



#include <iostream>

#include <iomanip>

#include <string>

using namespace std;

using namespace cv;







int main(int argc, char ** argv)

{



    std::string videoFile = "top_view.mp4";//视频的路径

    std::string videoFile1 = "fusion_view.mp4";//视频的路径

    

    /** 打开第一个视频文件 */

    VideoCapture cap; //视频句柄变量

    cap.open(videoFile);//打开视频

    if(!cap.isOpened())  //判断是否打开了

    {  

        printf("cap.isOpened is error\n");

        return -1;  

    } 

    

    /** 打开第二个视频文件 */

    VideoCapture cap1; //视频句柄变量

    cap1.open(videoFile1);//打开视频

    if(!cap1.isOpened())  //判断是否打开了

    {  

        printf("cap.isOpened is error\n");

        return -1;  

    } 

    

    

    /** 打开第一个视频文件的帧数 */

    int frame_num = cap.get(cv::CAP_PROP_FRAME_COUNT);

	std::cout << "videoFile total frame number is: " << frame_num << std::endl;

	/** 打开第二个视频文件的帧数 */

	int frame_num1 = cap1.get(cv::CAP_PROP_FRAME_COUNT);

	std::cout << "videoFile1 total frame number is: " << frame_num1 << std::endl;

	

	/** 打开第一个视频文件的帧率 */

    int fps = cap.get(cv::CAP_PROP_FPS);

	std::cout << "videoFile fps: " << fps << std::endl;

	/** 打开第二个视频文件的帧率 */

	int fps1 = cap1.get(cv::CAP_PROP_FPS);

	std::cout << "videoFile1 fps1: " << fps1 << std::endl;

	

	

	 /** 打开第一个视频文件的宽度 */

    int image_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);

	std::cout << "videoFile image width is: " << image_width << std::endl;

	/** 打开第二个视频文件的宽度 */

	int image_width1 = cap1.get(cv::CAP_PROP_FRAME_WIDTH);

	std::cout << "videoFile1 image width is: " << image_width1 << std::endl;

	

	/** 打开第一个视频文件的高度 */

    int image_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);

	std::cout << "videoFile image height: " << image_height << std::endl;

	/** 打开第二个视频文件的高度 */

	int image_height1 = cap1.get(cv::CAP_PROP_FRAME_HEIGHT);

	std::cout << "videoFile1 image height: " << image_height1 << std::endl;

	



    /** 打开第一个视频文件的矩阵对象的格式*/

     int frame_format = cap.get(cv::CAP_PROP_FORMAT);

	std::cout << "videoFile frame format: " << frame_format << std::endl;

	/** 打开第二个视频文件的矩阵对象的格式 */

	int frame_format1 = cap1.get(cv::CAP_PROP_FORMAT);

	std::cout << "videoFile1 image height: " << frame_format1 << std::endl;



	

	/** 合并视频初始化 */

	std::string mergeVideooFile = "mergeVideo.avi";

	int mergeVideooHeight = 600;

	int mergeVideooWidth = 1250;

	float mergeVideooFps = 10.0;

	int mergeVideooFpsFrameFormat = CV_8UC3;

	

	/*

	mergeVideooHeight = image_height + image_height1 + 10;

	mergeVideooWidth = image_width + image_width1 + 10;

	mergeVideooFps = fps;

	if(fps1>fps)

	    mergeVideooFps = fps1;

    mergeVideooFps = 10;

    mergeVideooFpsFrameFormat = frame_format;

	*/

	cv::VideoWriter track_writer;

    Mat img = cv::Mat::zeros(mergeVideooWidth, mergeVideooHeight, mergeVideooFpsFrameFormat);

    track_writer.open (mergeVideooFile, cv::VideoWriter::fourcc('M', 'P', '4', '2'), mergeVideooFps, cv::Size(mergeVideooWidth, mergeVideooHeight));

    if(!track_writer.isOpened())

    {

        assert("track writer open failed!\n");

    }

    

    





    Mat frame; 

    Mat frame1;

   

    while(1)

    {

        cap.read(frame);//从第一个视频获取一帧图片

        cap1.read(frame1);//从第二个视频获取一帧图片

        if(frame.empty()) break; //是否加载成功





        //std::cout << "Width : " << frame1.cols << std::endl;

        //std::cout << "Height: " << frame1.rows << std::endl;

        // std::cout << "Width : " << frame.cols << std::endl;

        //std::cout << "Height: " << frame.rows << std::endl;

        //cout << "======================"  << endl;

        

        

        // 设定ROI区域:截取一部分进行合并

        Mat imageROI= frame(Rect(400,0,400,600));

        Mat imageROI1= frame1(Rect(200,0,850,450));

       

        // 大小转换

        Mat imageROI1dst = Mat::zeros(600,850 , CV_8UC3); //我要转化为850*600大小的

	    resize(imageROI1, imageROI1dst, imageROI1dst.size());

   

      

        // 视频写字

        putText(imageROI1dst, videoFile, Point(5, 55),FONT_HERSHEY_PLAIN,2.0,(0, 255, 255),2);

        putText(imageROI, videoFile1, Point(5, 55),FONT_HERSHEY_PLAIN,2.0,(0, 255, 255),2);

      

         

        //创建目标Mat

        Mat des;

        des.create(mergeVideooHeight,mergeVideooWidth, imageROI1dst.type());

        // 视频帧合并

        Mat r1 = des(Rect(0, 0, 850, 600));

        imageROI1dst.copyTo(r1);

        Mat r2 = des(Rect(850, 0, 400, 600));

        imageROI.copyTo(r2);

        

        // 格式化要保存的视频帧

        cv::resize(des, img , cv::Size(mergeVideooWidth, mergeVideooHeight));

        // 保存视频

        track_writer.write(img);

        

        

        

        // 可视化

        imshow("mergeVideoo",des);

        if (cv::waitKey(30) == 'q')//可以用开控制播放或者获取图片的速度,毫秒级别

		{

			break;

		}

    }

    

    

    destroyWindow("mergeVideoo");//关闭窗口bb;

    destroyAllWindows();//关闭所有的窗口

    cap.release();//释放视频句柄

    

    track_writer.release();

	return 0;

}

编译

$ g++ mergeVideo.cpp -o mergeVideo$(pkg-config --cflags --libs opencv)

运行

$ ./mergeVideo
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: OpenCvSharp视频编辑器是基于OpenCvSharp库开发的一款视频编辑工具。OpenCvSharp是一个提供了C#语言绑定的OpenCV开源计算机视觉库,使开发者能够在C#环境下使用OpenCV的强大功能。 通过OpenCvSharp视频编辑器,我们可以对视频文件进行多种操作。首先,它提供了视频的截取功能,可以将视频文件从指定的时间范围内进行截取,得到我们需要的片段。其次,视频编辑器可以通过调整视频的帧率来改变视频的播放速度,实现快进、慢放等效果。此外,还可以进行图像添加、删除和替换操作,使得我们可以在视频中添加图片、文字等内容,让视频更加丰富多样。 OpenCvSharp视频编辑器还支持视频合并和分割功能。合并功能允许我们将多个视频文件合并成一个文件,使得观看更加方便。而分割功能则可以将一个视频文件分割成多个片段,方便我们进行后续的处理和使用。 除了基本的视频编辑功能外,OpenCvSharp视频编辑器还提供了一些高级的特效操作。比如可以调整视频的亮度、对比度和饱和度,提高视频的画质。还可以进行视频的模糊处理,实现特殊效果的添加。此外,还支持视频的旋转、翻转和裁剪等操作,使得我们可以对视频进行更加灵活的处理。 总之,OpenCvSharp视频编辑器是一款功能强大、操作简便的视频编辑工具,可以满足我们对视频编辑的多种需求。无论是简单的剪辑还是复杂的特效处理,OpenCvSharp视频编辑器都能够提供便捷的操作和高质量的结果。 ### 回答2: OpenCVSharp是一个开源的计算机视觉库,它提供了一系列功能强大的图像和视频处理工具。这个库以C#语言编写,为开发人员提供了方便易用的接口,使他们能够在C#环境中轻松地实现各种计算机视觉任务。 OpenCVSharp视频编辑器是基于OpenCVSharp库开发的一个应用程序,它专门用于视频编辑。这个编辑器提供了一系列视频处理功能,包括视频剪辑,拼接,分割,变速,特效添加等。 使用OpenCVSharp视频编辑器,开发人员可以方便地加载视频文件,对视频进行各种处理,如裁剪视频片段、合并多个视频片段、调整视频的播放速度等。此外,该编辑器还提供了一系列特效和滤镜,可以让用户为视频添加转场效果、改变视频色彩风格、添加文字水印等。 OpenCVSharp视频编辑器还提供了一个直观的用户界面,使用户能够轻松地进行操作。用户可以通过简单的拖放操作添加视频文件,调整视频处理参数,并即时预览处理效果。同时,编辑器还支持批量处理多个视频文件,提高处理效率。 总之,OpenCVSharp视频编辑器是一个功能全面、易于使用的视频编辑工具。它基于OpenCVSharp库,提供了丰富的视频处理功能,同时具备简洁直观的用户界面。无论是专业开发人员还是普通用户,都可以使用该编辑器轻松地对视频进行编辑和处理。 ### 回答3: OpenCvSharp是一个基于OpenCV库的开源计算机视觉库,它提供了一系列功能强大的图像处理和计算机视觉算法。在其中,OpenCvSharp也提供了视频编辑器的功能。 OpenCvSharp的视频编辑器可以用于对视频进行处理、修改和编辑。它可以读取视频文件,并提供了一系列方法和函数,可以对视频进行裁剪、旋转、缩放、滤镜等操作。例如,我们可以使用OpenCvSharp实现视频的剪辑,只提取出视频的某一部分进行处理或者保存。 此外,OpenCvSharp还提供了一些高级的视频处理技术。例如,我们可以使用这个库来实现运动检测,识别视频中的物体移动并进行相应的处理。另外,还可以通过OpenCvSharp实现视频的帧差法,即比较相邻帧之间的像素变化,来检测和识别视频中的物体。 总的来说,OpenCvSharp提供了丰富的视频处理功能,可以满足各种视频编辑的需求。它易于使用并具有较高的性能,因此在计算机视觉和视频处理领域中得到广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听雨听风眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值