当前位置:   article > 正文

2.1 使用openCV捕获摄像头并实现预览功能_opencv摄像头

opencv摄像头

本课对应源文件下载链接:

https://download.csdn.net/download/XiBuQiuChong/88802175

 从这节课开始,我们将逐步利用ffmpeg和openCV实现一个可以将usb摄像头画面及麦克风声音合并在一起推送到rtmp服务器的推流工具,这种工具一般可用于视频直播、会议、授课等场景,可以说应用场景非常广泛。推流端的最基本功能其实就两个:预览画面并将画面和声音合并后推送到rtmp服务器,为降低难度,这节课我们先实现摄像头的预览功能。

一、最终实现的效果

二、使用openCV捕获摄像头并实现预览功能的原理

与FFmpeg类似,openCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,供了丰富的图像处理和计算机视觉算法。它可以用于处理图像和视频数据,以及进行特征提取、目标检测、图像分割、运动跟踪等任务。以下是一些openCV的主要功能:

图像读取和显示:openCV可以读取和保存各种图像格式,并提供了显示图像的函数。

图像处理:openCV提供了丰富的图像处理函数,包括图像滤波、边缘检测、图像变换、颜色空间转换等。

特征提取和描述:openCV支持各种特征提取算法,如SIFT、SURF、ORB等,并提供了特征描述子的计算和匹配函数。

目标检测:openCV提供了多种目标检测算法,如Haar特征分类器、HOG特征分类器、级联分类器等。

图像分割:openCV支持基于颜色、纹理、形状等特征的图像分割算法,如GrabCut、MeanShift、Watershed等。

运动跟踪:openCV提供了多种运动跟踪算法,如光流法、卡尔曼滤波器、背景减除等。

三维重建:openCV支持从多个图像中恢复三维场景的算法,如立体匹配、结构光、稀疏重建等。

机器学习:openCV集成了机器学习库,包括支持向量机(SVM)、随机森林(Random Forest)、神经网络等算法。

摄像头和视频处理:openCV可以直接从摄像头读取视频流,并提供了视频处理函数,如帧差法、光流法等。

图像拼接和全景图像:openCV支持将多个图像拼接成全景图像的算法,如SIFT特征匹配、RANSAC算法等。

如上所述,可以直接用openCV捕获摄像头画面并将其显示到MFC窗口中。

三、捕获摄像头画面并预览的具体实现

1.解压缩第一节课的demo1.rar,并修改工程文件夹demo1为demo5,及时备份源文件并在原基础上继续迭代开发是一种好习惯。

2.为了与上节课的播放功能区分,新建或直接复制fmlp(Flash Media Live Player)类为一个新的fmle(Flash Media Live Encoder)类,并修改主对话框相应代码使fmle能正常工作。

修改如下:

  1. //#include "fmlp.h"
  2. #include "fmle.h"
  3. //fmlp *myFmlp = new fmlp();
  4. fmle *myFmle = new fmle();

3.在fmle.cpp的init函数中新开线程打开摄像头并预览:

  1. int fmle::init()
  2. {
  3. capCamHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)capCamThread, (LPVOID)this, 0, NULL);
  4. return 0;
  5. }
  6. DWORD WINAPI fmle::capCamThread(LPVOID lpParam) {
  7. fmle *pThis = (fmle*)lpParam;
  8. pThis->capCam();
  9. return 0;
  10. }
  11. int fmle::capCam() {
  12. videoCap.open(0);
  13. cv::Mat camMat;
  14. while (true)
  15. {
  16. if (!videoCap.isOpened()){
  17. Sleep(1);
  18. continue;
  19. }
  20. BOOL ifSuccess = videoCap.read(camMat);
  21. if (camMat.empty())
  22. {
  23. Sleep(1);
  24. continue;
  25. }
  26. if (!camMat.empty()){
  27. cv::imshow("video", camMat);
  28. cv::waitKey(10);
  29. }
  30. }
  31. camMat.release();
  32. return 0;
  33. }

如果弹出video对话框并显示摄像头图像则表示成功。

4.参考第2课将图像显示到程序主对话框,为了与播放器区分,新方法命名为drawMatOfPub,在主对话框显示摄像头图像则表示预览成功。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/819654
推荐阅读
相关标签
  

闽ICP备14008679号