我使用yocto项目安装了opencv 2.4.9。
VideoWriter video("out.avi",CV_FOURCC('M','J','P','G'),30,
Size(frame_width,frame_height));
没有创建out.avi文件。
这是代码:
int main()
{
cv::VideoCapture capture(0);
int frame_width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
int frame_height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
VideoWriter video("out.avi", CV_FOURCC('M','J','P','G'), 30,
Size(frame_width,frame_height));
if (!capture.isOpened())
{
printf("Error in open\n");
}
cv::Mat frame;
while(1)
{
if (!capture.read(frame))
{
printf("Error in capture\n");
}
video.write(frame);
cv::waitKey(30);
}
}
但是相同的代码正在x86 linux上运行。
答案 0 :(得分:2)
如果代码在Linux上运行,则错误可能来自于您的Windows机器上没有可用的MJPG编解码器。
测试它的一种简单方法是将CV_FOURCC('M','J','P','G')
替换为-1,这样您的程序就会要求您在列表中选择编解码器。
除此之外,我建议你在while循环后添加video.release();
。有时,当VideoWriter实例发布不佳时,视频将被创建,但您将无法使用VLC或任何其他媒体播放器读取它。
答案 1 :(得分:0)
感谢您的回复。我将CV_FOURCC('M','J','P','G')改为-1并尝试了。但文件本身并没有创建。
答案 2 :(得分:0)
我使用open.cv 2.4.10包中的cap.cpp和cap_gstreamer.cpp编译。 我编译了适当的库,包括像,
g ++ capture.cpp cap.cpp cap_gstreamer.cpp -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango- 1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lgthread-2.0 -lglib-2.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstreamer-1.0 - lgobject-2.0 -lglib-2.0 -lgstapp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstriff-1.0 -lgstreamer-1.0-lgobject-2.0 -lglib-2.0 -lgstpbutils-1.0 -lgstreamer- 1.0 -lgobject-2.0 -lglib-2.0 -lv4l1 -lv4l2 -lavcodec -lavformat -lavutil -lswscale -lbz2 -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
然后这个捕获对我有用。谢谢。