当前位置:   article > 正文

OpenCV 实现读取摄像头、视频读取保存 (C++)_opencv 读取摄像头原理

opencv 读取摄像头原理

一、读取摄像头

重点语句:VideoCapture、imshow

原理:使用VideoCapture语句读取摄像头,再利用while一次次将VideoCapture所读取的数据利用imshow语句一帧帧地读取出来

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. #include "CameraVideo.h"
  4. using namespace cv;
  5. using namespace std;
  6. int main(int argc,char** argv)
  7. {
  8. VideoCapture video; //用VideoCapture来读取摄像头
  9. Mat picture; //声明一个保存图像的类
  10. video.open(0); //括号的0表示使用电脑自带的摄像头
  11. if (!video.isOpened()) //判断摄像头是否读取成功
  12. {
  13. return -1; //返回一个代数值,表示函数失败(若为return 1,则表示ture)
  14. }
  15. while(1) //(读取成功,使用循环语句将视频一帧一帧地展示出来)
  16. {
  17. video >> picture; //词条将video中的数据流向picture
  18. imshow("input", picture); //使用imshow语句将图片显示出来
  19. waitKey(30); //停顿30ms
  20. }
  21. return 0;
  22. }

二、保存摄像头视频

重点语句:VideoWriter

原理:在摄像头读取完图之后,利用VideoWriter语句将图像保存为固定格式

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main(int argc, char** argv)
  6. {
  7. Mat picture;
  8. VideoCapture video(0);
  9. if (!video.isOpened())
  10. {
  11. return-1;
  12. }
  13. video >> picture;
  14. VideoWriter outputVideo; //用VideoWriter语句保存视频
  15. int codec = VideoWriter::fourcc('P', 'I','M','1'); //OpenCV4版本的编码设置格式
  16. //('P', 'I','M','1')—MPEG-1编码类型,文件扩展名.avi
  17. int fps = 25; //设置帧率
  18. string outputVideoPath = "CameraVideo.mp4"; //保存视频的文件名
  19. outputVideo.open(outputVideoPath, codec, fps, picture.size());//创建保存视频文件的视频流
  20. if (!outputVideo.isOpened()) //判断视频流是否创建成功
  21. {
  22. return -1;
  23. }
  24. while (1)
  25. {
  26. if (!video.read(picture)) //检测是否能够读取一帧图像
  27. {
  28. break;
  29. }
  30. outputVideo.write(picture); //将video的图像数据一帧图像写入
  31. imshow("CameraVideo.mp4", picture); //显示图像
  32. char c = waitKey(50);
  33. if (c == 27) //按Esc保存视频
  34. {
  35. break;
  36. }
  37. }
  38. return 0;
  39. }

三、如何按空格键保存摄像头视频

通过加入一个循环语句,按空格将图片按照1.2.3.4.5.6.的顺序保存下来

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main(int argc, char** argv)
  6. {
  7. Mat picture;
  8. VideoCapture video(0);
  9. if (!video.isOpened())
  10. {
  11. return-1;
  12. }
  13. int i = 0;
  14. while (1)
  15. {
  16. video >> picture;
  17. imshow("input", picture);
  18. if (waitKey(20) == 32) //设置为按空格保存
  19. {
  20. string name = to_string(i) + ".jpg"; //将照片以jpg的格式进行命名
  21. imwrite(name, picture); //将按空格时的图像帧保存下来
  22. i++;
  23. }
  24. if (waitKey(10) == 27) //按Esc键退出
  25. {
  26. break;
  27. }
  28. }
  29. return 0;
  30. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号