OpenCV3.1录制视频+把图片合成视频(同时解决一个OpenCV不能打开自己录制的视频的小问题)

网友投稿 265 2022-11-23

OpenCV3.1录制视频+把图片合成视频(同时解决一个OpenCV不能打开自己录制的视频的小问题)

记一下,备忘。 用OpenCV打开OpenCV录制的视频,发现报错,代码如下 cv::VideoCapture capture; capture.open("E:\\opencv.avi"); 追踪了一下,原来是打开要求用MJPG, bool AviMjpegStream::parseStrl(MjpegInputStream& in_str, uint8_t stream_id) { ... ========> 这里要求是MJPG_CC if(strm_hdr.fccType == VIDS_CC && strm_hdr.fccHandler == MJPG_CC) {... } ... } 所以录制时把属性设置为 VideoWriter::fourcc('M', 'J', 'P', 'G')即可,下面是录制视频的原码, #include "stdafx.h" #include #include #include #include using namespace cv; #pragma comment(lib, "opencv_world310d.lib") #include using namespace std; int main() { //打开摄像头 VideoCapture captrue(0); //视频写入对象 VideoWriter write; //写入视频文件名 string outFlie = "E://opencv.avi"; //获得帧的宽高 int w = static_cast(captrue.get(CV_CAP_PROP_FRAME_WIDTH)); int h = static_cast(captrue.get(CV_CAP_PROP_FRAME_HEIGHT)); Size S(w, h); //获得帧率 captrue.set(CV_CAP_PROP_FPS, 25); double fps = captrue.get(CV_CAP_PROP_FPS); //打开视频文件,准备写入 //write.open(outFlie, -1, r, S, true); //write.open(outFlie, CV_FOURCC('M', 'J', 'P', 'G'), fps, S, true); // this is OK too int val = VideoWriter::fourcc('M', 'J', 'P', 'G'); write.open(outFlie, val, fps, S, true); //打开失败 if (!captrue.isOpened()) { return 1; } bool stop = false; Mat frame; //循环 while (!stop) { //读取帧 if (!captrue.read(frame)) break; imshow("Video", frame); //写入文件 write.write(frame); if (waitKey(10) > 0) { stop = true; } } //释放对象 captrue.release(); write.release(); cvDestroyWindow("Video"); return 0; } 如果要把图片合成视频,代码也差不多,同样需要指定MJPG编码 #include "stdafx.h" #include #include #include #include using namespace cv; #pragma comment(lib, "opencv_world310d.lib") #include using namespace std; int main() { Mat image; char filename[1000]; //图片的名称 int isColor = 1; //如果为0 ,可输出灰度图像 int fps = 10; //设置输出视频的帧率 VideoWriter writer("video_out.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(360,240), isColor); for (unsigned int i = 1; i<=120; i++) { //我的图片名称是:0001.jpg, ..... 0120.jpg sprintf(filename, "E:/sequences/Crossing/img/0%03d.jpg", i); image = imread(filename);//导入图片 if (image.empty()) { break; } waitKey(0); //cout << image.channels() << endl; //调试用 //cout << image.size() << endl; //调试用 writer.write(image); } writer.release(); return 0; }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java连接zookeeper的3种方式小结
下一篇:实现带输电功能的USB Type-C直通设备时的关键工程注意事项
相关文章

 发表评论

暂时没有评论,来抢沙发吧~