使用 MFC 和 OpenCV 实现实时摄像头视频显示

这篇具有很好参考价值的文章主要介绍了使用 MFC 和 OpenCV 实现实时摄像头视频显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、引言

MFC 是一个在 Windows 平台上编写 C++ 应用程序的库,提供了丰富的用户界面功能。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,包含了丰富的图像处理和计算机视觉功能。本文将向大家展示如何将这两个库结合起来,实现一个实时显示摄像头画面的简单应用程序。

2、创建MFC对话框程序

在 Visual Studio 中,我们首先需要创建一个新的 MFC 对话框程序。然后在资源视图中修改对话框属性,为摄像头画面预留一个静态控件。在本示例中,我们将其更名为 "IDC_VIDEO"

3、集成 OpenCV

为了使用 OpenCV,我们需要将其添加到项目中。请确保已经安装并配置好 OpenCV 4.5.1。在解决方案资源管理器中,我们创建了一个名为 "CameraController.h" 的头文件,其中定义了一个负责控制摄像头的类。类的实现位于 "CameraController.cpp" 文件中。

#pragma once
#include <opencv2/opencv.hpp>

class CameraController
{
public:
    CameraController();
    ~CameraController();

    void OpenCamera(int cameraIndex = 0);
    void CloseCamera();
    cv::Mat GetFrame();

private:
    cv::VideoCapture m_capture;
};
#include "pch.h"
#include "CameraController.h"

CameraController::CameraController()
{
}

CameraController::~CameraController()
{
    CloseCamera();
}

void CameraController::OpenCamera(int cameraIndex)
{
    m_capture.open(cameraIndex);
}

void CameraController::CloseCamera()
{
    if (m_capture.isOpened())
    {
        m_capture.release();
    }
}

cv::Mat CameraController::GetFrame()
{
    cv::Mat frame;
    m_capture.read(frame);
    return frame;
}

4、修改 MFC 程序

为了在 MFC 程序中集成 OpenCV 功能,我们需要对 "MyMFCAppDlg.cpp" 文件进行修改。首先,在文件顶部添加必要的 include 语句,然后在 "CMyMFCAppDlg" 类中添加一个 "CameraController" 对象。接下来,我们需要修改 "CMyMFCAppDlg::OnInitDialog()" 函数以打开摄像头。

private:
    CameraController m_cameraController;
m_cameraController.OpenCamera();

5、实时显示摄像头画面

为了实时更新摄像头画面,我们创建了一个定时器,并在 "CMyMFCAppDlg::OnTimer()" 函数中处理定时器消息。在该函数中,我们通过 "CameraController" 对象获取摄像头帧,并将其转换为 MFC 可以显示的格式(CImage 对象)。最后,我们将帧绘制到对话框上的静态控件中。

void CMyMFCAppDlg::ShowCameraFrame() //显示
{
    if (!m_cameraController.GetFrame().empty())
    {
        cv::Mat frame = m_cameraController.GetFrame();
        cv::Mat resizedFrame;

        CStatic* pWnd = (CStatic*)GetDlgItem(IDC_VIDEO);
        CRect rect;
        pWnd->GetClientRect(&rect);

        cv::resize(frame, resizedFrame, cv::Size(rect.Width(), rect.Height()));

        // Convert color space from BGR to RGB
        cv::cvtColor(resizedFrame, resizedFrame, cv::COLOR_BGR2RGB);

        // Create a CImage object to store the OpenCV frame
        CImage image;
        image.Create(resizedFrame.cols, resizedFrame.rows, 24);

        // Copy the frame data to the CImage object
        memcpy(image.GetBits(), resizedFrame.data, resizedFrame.cols *resizedFrame.rows * image.GetPitch());

        // Draw the image on the dialog
        CDC* pDC = pWnd->GetDC();
        image.BitBlt(pDC->m_hDC, 0, 0);
        ReleaseDC(pDC);
    }
}
SetTimer(1, 30, NULL); // 30ms interval
void CMyMFCAppDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    if (nIDEvent == 1)
    {
        ShowCameraFrame();
    }

    CDialogEx::OnTimer(nIDEvent);
}

6、结论

通过结合 MFC 和 OpenCV,我们成功实现了一个实时显示摄像头画面的简单应用程序。本文详细介绍了如何创建 MFC 对话框程序,集成 OpenCV 库,以及如何打开摄像头并实时显示视频。这只是 MFC 和 OpenCV 潜力的冰山一角,希望本文能为您在实际项目中集成 MFC 和 OpenCV 提供帮助。文章来源地址https://www.toymoban.com/news/detail-638014.html

到了这里,关于使用 MFC 和 OpenCV 实现实时摄像头视频显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 佩戴口罩检测从零开始使用YOLOv5+PyQt5+OpenCV+爬虫实现(支持图片、视频、摄像头实时检测,UI美化升级)

    全流程 教程,从数据采集到模型使用到最终展示。 支持图片检测、视频检测、摄像头实时检测,还支持视频的暂停、结束等功能。若有任何疑问和建议欢迎评论区讨论。 先放上最终UI实现效果 图片检测效果图 视频检测效果图 摄像头实时检测效果图 我已经处理了一份数据形

    2024年02月04日
    浏览(34)
  • 使用手机摄像头实现视频监控实时播放

    视频监控实时播放的原理与目前较为流行的直播是一致的,所以采用直播的架构实现视频监控实时播放,流程图如下: 目前实时视频流的传输协议有以下几种:RTSP、RTMP、HLS、Http-flv。 安卓APP开发使用HBuilder,而HBuilder内置了LivePusher直播推流控件,该控件使用了RTMP协议,所以

    2023年04月08日
    浏览(35)
  • OpenCV获取网络摄像头实时视频流

    参考文章: [常用工具] OpenCV获取网络摄像头实时视频流_opencv网络摄像头 [常用工具] OpenCV获取网络摄像头实时视频流_opencv网络摄像头_落痕的寒假的博客-CSDN博客 在使用OpenCv处理视频时,无论是视频文件还是摄像头画面,都要使用VideoCapture类来进行每一帧图像的处理。当我们

    2024年02月01日
    浏览(31)
  • 使用SOCKET搭建linux和window实现实时摄像头传输(linux传输win端使用C++mfc显示)--Win端开发

    配置: Window10 VS2013 opencv249 如果VS和opencv配置不一样,让版本对应 Opencv与VS版本 1.1 MFC项目搭建 通过这些步骤就创建了一个MFC基础项目。 1.2项目属性配置 本项目因为要使用opencv,所以就要配置以下opencv的环境 首先在opencv官网下载opencv,此次使用opencv2.4.9,下载完并且完成安装 接下

    2024年02月10日
    浏览(36)
  • 毕业设计——基于python-contrib-opencv的人脸识别及检测系统设计与实现(实现电脑端摄像头读取视频,实时人脸录入,人脸检测,人脸识别等功能)

    如需完整源码,可以联系博主获取 基于python-contrib-opencv,dlib,pyqt5。能够实现电脑端摄像头读取视频,实时人脸录入,人脸检测,人脸识别等功能。 一、引言 随着计算机视觉和人工智能技术的不断发展,人脸识别技术已成为智能安防、身份验证等领域的关键技术之一。而基于

    2024年04月12日
    浏览(36)
  • Pyqt5+Opencv实现摄像头图像的实时读取并显示

    QTimer在界面中不可见,在UI设计器中也找不到它,只能通过纯代码实现,主要作用是定时特定的时间。 想要掌握QTimer只需掌握setInterval(设置定时时间,单位ms)、start(启动定时器),和定时时间到时所发出的信号timeout()即可。程序设计的思路: 1.先设定定时周期 2.绑定timeout()信号

    2024年02月04日
    浏览(38)
  • OpenCV(视频加载与摄像头使用)

    目录 1、VideoCapture类 2、视频属性get()  3、视屏文件保存

    2024年02月12日
    浏览(35)
  • VUE项目中优雅使用EasyPlayer实时播放摄像头多种格式视频

    简介:集播放http-flv, hls, websocket 于一身的H5视频直播/视频点播播放器, 使用简单, 功能强大; 功能支持 : 支持 MP4 播放 支持 m3u8/HLS 播放; 支持 HTTP-FLV/WS-FLV 播放; 支持直播和点播播放; 支持播放器快照截图; 支持点播多清晰度播放; 支持全屏或比例显示; 自动检测 IE 浏览器兼容播

    2024年02月02日
    浏览(35)
  • OpenCV 实现读取摄像头、视频读取保存 (C++)

    重点语句:VideoCapture、imshow 原理:使用VideoCapture语句读取摄像头,再利用while一次次将VideoCapture所读取的数据利用imshow语句一帧帧地读取出来 重点语句:VideoWriter 原理:在摄像头读取完图之后,利用VideoWriter语句将图像保存为固定格式 通过加入一个循环语句,按空格将图片按

    2024年02月11日
    浏览(35)
  • 使用QT的QML实时显示海康威视网络摄像头的视频数据

    需求背景: 开发的监控软件中有个监控页面需要实时显示网络摄像头的数据,整个监控软件是基于QT的QML语言开发的。在QML中播放视频使用MediaPlayer组件就可以,但网上看到的一些都是播放录制好的视频文件,对于实时播放摄像头数据介绍的比较少。 开发环境: Debian11.3 Qt

    2024年02月09日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包