转载,opencv4 缺少ffmpeg gstreamer

用opencv把图片合并成视频,代码遍地都是

// jpg2video.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	// 构造一个VideoWriter
	VideoWriter video("test.avi", CV_FOURCC('M', 'J', 'P', 'G'), 50, Size(640, 480));
	// 从一个文件夹下读取多张jpg图片
	String pattern = "F:\\code\\132079944174097769jpg";
	vector<String> fn;

	glob(pattern, fn, false);

	size_t count = fn.size();
	for (size_t i = 0; i < count; i++)
	{
		Mat image = imread(fn[i]);
		// 这个大小与VideoWriter构造函数中的大小一致。
		resize(image, image, Size(640, 480));
		imshow("img", image);
		waitKey(10);
		// 流操作符,把图片传入视频
		video << image;
	}
	cout << "处理完毕!" << endl;
	system("pause");
	// 处理完之后会在得到一个名为test.avi的视频文件。
}

opencv4.0.0中已经对CV_FOURCC进行了改变,如下图所示,CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’)CV_FOURCC(‘M’,‘J’,‘P’,‘G’),已经改为CAP_OPENCV_MJPEG,希望大家不要走弯路https://blog.csdn.net/weixin_41406657/article/details/85123361

另外,仍然报错,

[ INFO:0] VIDEOIO: Enabled backends(6, sorted by priority): FFMPEG(1000); GSTREAMER(990); MSMF(980); DSHOW(970); CV_IMAGES(960); CV_MJPEG(950)
[ INFO:0] VideoIO pluigin (FFMPEG): glob is 'opencv_videoio_ffmpeg*.dll', 1 location(s)
[ INFO:0]     - E:\Program Files\opencv-4.1.0\build\bin\Debug: 0
[ INFO:0] Found 0 plugin(s) for FFMPEG
[ INFO:0] VideoIO pluigin (GSTREAMER): glob is 'opencv_videoio_gstreamer*.dll', 1 location(s)
[ INFO:0]     - E:\Program Files\opencv-4.1.0\build\bin\Debug: 0
[ INFO:0] Found 0 plugin(s) for GSTREAMER

。解决方法如下

https://www.cnblogs.com/huluwa508/p/10142718.html

一、Configure会报一些红色的警告信息,比如:

复制代码

 1 CMake Warning at cmake/OpenCVDownload.cmake:193 (message):
 2 FFMPEG: Download failed: 7;"Couldn't connect to server"
 3 
 4 For details please refer to the download log file:
 5 
 6 D:/study/opencv_with_contrib_test_sln/CMakeDownloadLog.txt
 7 
 8 Call Stack (most recent call first):
 9 3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
10 cmake/OpenCVFindLibsVideo.cmake:200 (download_win_ffmpeg)
11 CMakeLists.txt:636 (include)

复制代码

提示FFMPEG下载失败,因为无法连接到服务器,打开 CMakeDownloadLog.txt 查看详细信息。

二、打开CMakeDownloadLog.txt

 

复制代码

#use_cache "D:/study/opencv-4.0.0/.cache"
#do_copy "opencv_ffmpeg.dll" "849286ccc527c99e5a218b67f13c6e8c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll" "D:/study/opencv_with_contrib_test_sln/3rdparty/ffmpeg"

这两句的意思是说将 opencv_ffmpeg.dll(它的md5签名是 849286ccc527c99e5a218b67f13c6e8c,下载地址是  "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll" )
 从 "D:/study/opencv-4.0.0/.cache" 拷贝到 "D:/study/opencv_with_contrib_test_sln/3rdparty/ffmpeg"目录下。

#missing "D:/study/opencv_with_contrib_test_sln/3rdparty/ffmpeg/opencv_ffmpeg.dll"
目标目录下没有此文件

#cmake_download "D:/study/opencv-4.0.0/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"
下载此文件到源代码路径 /.cache/ffmpeg/,并命名为"md5-文件名"

# timeout on name lookup is not supported
# Trying 151.101.108.133...
# TCP_NODELAY set
# connect to 151.101.108.133 port 443 failed: Connection refused
# Failed to connect to raw.githubusercontent.com port 443: Connection refused
# Closing connection 0
#
连接到服务器失败

复制代码

 

三、分析

公司工作机无法访问外网,自然就无法连接到下载服务器。那就直接通过外网下载好需要的文件,然后重命名为"md5-文件名",放在  /.cache/ffmpeg/ 文件夹下面,或者直接放到目标路径  /3rdparty/ffmpeg/opencv_ffmpeg.dll(不用重命名)。

注意:

1、 https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/ffmpeg_version.cmake" 无法直接下载,

而是直接打开了ffmpeg_version.cmake,可以右键网页选择另存为 ffmpeg_version.cmake.txt,然后再改为ffmpeg_version.cmake。这里如果自己新建一个txt,然后直接将网页上的内容拷进去,然后再该后缀为.cmake是不行的,会提示md5不匹配。

2、不同版本的OpenCV对应的 opencv_ffmpeg.dll 等缺失文件的 md5 签名是不一样的

四、总结

1、问题不难,一步一步的去求解;

2、沉下心来看英文,比六级简单得多;

3、ffmpeg_version.cmake 这个直接通过连接是不能直接下载的,自己新建一个.cmake不行的时候就去看下为什么不行,而不是不停的重复相同的操作以期望奇迹的出现。

4、当发现百度到的解决办法基本雷同时,就不必花大量时间去检索和自己的问题一模一样的博文了,这样只会浪费时间,心情也会变得焦躁,此时应该冷静的去思考。

猜你喜欢

转载自blog.csdn.net/u010752777/article/details/97367932