当我在函数中使用时: 'x'.write(frame) for write to video file in opencv 程序通过代码,我编译它没有错误,但是当我打开文件时,我看到它是 0 kb 并且播放器可以'玩它。
有人能帮我吗?
这是我的代码:
// Setup output video
cv::VideoWriter output_cap("output.avi",
CV_CAP_PROP_FOURCC,
CV_CAP_PROP_FPS,
cv::Size(1376, 768));
// Loop to read frames from the image and write it to the output capture
cv::Mat frame = imread("1.jpg", 0);
for(int hgf=1;hgf<=300;hgf++)
{
if (!frame.data)
{
break;
}
output_cap.write(frame);
}
大家好!
最佳答案
我认为主要问题是您的代码将错误的 FOURCC 值传递给 VideoWriter
。 CV_CAP_PROP_FOURCC
(#defined as 6) 用于为 FOURCC 属性命名,但它不是一个正确的值。 CV_CAP_PROP_FPS
类似(#defined 为 5),但这里的效果只是告诉 VideoWriter
使用 5.0 fps。
这对我有用:
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
if ( argc != 2 ) {
cout << "image required" << endl;
return -1;
}
Mat frame = imread(argv[1], 1);
VideoWriter output_cap("output.avi", CV_FOURCC('M','J','P','G'), 15,
frame.size());
for(int hgf=1; hgf<=300; hgf++) {
output_cap.write(frame);
}
return 0;
}
注意:在 Linux 上,根据我的经验,
VideoWriter
对视频格式的支持一般。对于两种广泛使用的格式 M-JPEG(上面使用的)和 H.264,M-JPEG 适用于 OpenCV 2.4,但不适用于 3.X 和 H.264,与 question 对于 2.4 和 3 的失败方式相同。 X。关于c++ - 为什么函数 'x' .write(frame) 对我不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38921918/