opencv c++编解码视频遇到错误

本文描述了在使用OpenCV4.2.0处理视频时遇到的错误,即FFmpegOpenCVVideoI/O插件使用的OpenCVminorversion不匹配。作者提供了重新下载特定文件和配置VScode环境的方法来解决这个问题,以便实现视频的左下角区域180度旋转。
摘要由CSDN通过智能技术生成

前提:

1.opencv可以打开、显示、灰度化并保存图像;

2.路径没有错误;

3.打开视频报以下错误:

[ERROR:0] global D:\opencv\sources\modules\videoio\src\backend_plugin.cpp (227) PluginBackend Video I/O: wrong OpenCV minor version used by plugin 'FFmpeg OpenCV Video I/O plugin': 4.1, OpenCV version is '4.2.0' 

4.代码如下:

#include<iostream>
#include<opencv2/opencv.hpp>

int rotate_video(std::string dir_src,std::string video_name,std::string save_dir_src){
	std::string video_src=dir_src+"\\"+video_name;
	std::string save_video_src=save_dir_src+"\\"+video_name;

	cv::VideoCapture capture;
	// capture.open(0);// 打开摄像头
	capture.open(video_src);// 打开文件
	if (!capture.isOpened()) {
		printf("read video file failed !\n");
		return -1;
	}
	int type = static_cast<int>(cv::VideoWriter::fourcc('m', 'p', '4', 'v'));


	std::cout<<static_cast<int>(capture.get(cv::CAP_PROP_FOURCC))<<std::endl;

	cv::Size S = cv::Size((int)capture.get(cv::CAP_PROP_FRAME_WIDTH), (int)capture.get(cv::CAP_PROP_FRAME_HEIGHT));
	double fps = capture.get(cv::CAP_PROP_FPS);

	// int fps=20; 

	printf("FPS:  %d \n", fps);

	cv::VideoWriter out(save_video_src, type, fps, S, true);

	cv::Mat frame;

	int index=0;

	while (capture.read(frame)) {
		// imshow("src", frame);


        cv::Mat cropped_image = frame(cv::Range(960,1920),cv::Range(0,1280));

        cv::Mat rotate_crop_image;

        cv::flip(cropped_image,rotate_crop_image,-1);

        cv::Mat frame_roi=frame(cv::Range(960,1920),cv::Range(0,1280));

        rotate_crop_image.copyTo(frame_roi);

        // cv::imshow("src",frame);
        // cv::waitKey(0);

		out.write(frame);
		index+=1;
		std::cout<<"正在转换:"<<video_name<<" "<<index<<std::endl;



	}
	capture.release();
	out.release();
	return 0;


}


int main() {
	std::string dir_src,save_dir_src,video_name;
	std::cout<<"请输入video文件夹路径:"<<std::endl;
	std::cin>>dir_src;
	std::cout<<std::endl;

	std::cout<<"请输入save video文件夹路径:"<<std::endl;
	std::cin>>save_dir_src;
	std::cout<<std::endl;

	std::cout<<"请输入video 名称:"<<std::endl;
	std::cin>>video_name;
	std::cout<<std::endl;

	rotate_video(dir_src,video_name,save_dir_src);

}

5.代码功能:输入一个视频,旋转左下角区域180度。

解决方法:

1.重新下载此三个文件(https://www.cnblogs.com/huluwa508/p/10142718.html

其中,MD5码获得方法为

2.执行(VScode配置opencv_opencv vscode配置-CSDN博客)2.3步骤;

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 OpenCV C++ 中保存视频,可以使用 VideoWriter 类。以下是保存视频的基本步骤: 1. 创建 VideoWriter 对象并设置输出文件名、编解码器、帧率和视频尺寸。 2. 循环取每一帧图像,并将其写入 VideoWriter 对象中。 3. 最后,释放 VideoWriter 对象和所有图像。 下面是一个示例代码: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture cap(0); // 打开摄像头 if (!cap.isOpened()) // 检查摄像头是否打开 { std::cout << "Failed to open camera!" << std::endl; return -1; } int fourcc = VideoWriter::fourcc('M', 'J', 'P', 'G'); // 定义编解码器 int fps = 30; // 定义帧率 Size frameSize(cap.get(CAP_PROP_FRAME_WIDTH), cap.get(CAP_PROP_FRAME_HEIGHT)); // 定义视频尺寸 VideoWriter writer("output.avi", fourcc, fps, frameSize); // 创建 VideoWriter 对象 while (true) { Mat frame; cap >> frame; // 取一帧图像 if (frame.empty()) // 检查图像是否为空 { std::cout << "Failed to capture frame!" << std::endl; break; } writer.write(frame); // 将图像写入 VideoWriter 对象中 imshow("Video", frame); // 显示图像 if (waitKey(30) == 27) // 按下 ESC 键退出循环 { break; } } writer.release(); // 释放 VideoWriter 对象 cap.release(); // 释放摄像头 destroyAllWindows(); // 关闭所有窗口 return 0; } ``` 在此示例中,我们使用了默认摄像头,并将输出文件命名为“output.avi”。你可以通过更改文件名称和路径以及选择其他编解码器和帧率来定制保存视频的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值