ZBLOG

mfc拿到opencv中的Frame怎么播放出来c++代码

要将 OpenCV 中的帧(Frame)播放出来,可以使用 MFC(Microsoft Foundation Class)和 GDI+(Graphics Device Interface Plus)库来完成。下面是一个示例代码:

#include <opencv2/opencv.hpp>
#include <afxwin.h>

void DisplayFrame(cv::Mat frame) {
    // 将 OpenCV 的帧转换为 GDI+ 的位图格式
    cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);
    CImage image;
    image.Create(frame.cols, frame.rows, 24);  // 创建位图对象
    memcpy(image.GetBits(), (uchar*)frame.data, frame.cols * frame.rows * 3);  // 复制像素数据

    // 在 MFC 窗口中绘制图像
    CWnd* pWnd = AfxGetMainWnd();
    CDC* pDC = pWnd->GetDC();
    CDC dc;
    dc.CreateCompatibleDC(pDC);
    
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(pDC, frame.cols, frame.rows);
    
    CBitmap* oldbmp = dc.SelectObject(&bmp);
    dc.BitBlt(0, 0, frame.cols, frame.rows, NULL, 0, 0, WHITENESS);
    
    Graphics graphics(dc.GetSafeHdc());
    
   // 绘制位图
   graphics.DrawImage((Gdiplus::Bitmap*)&image,
        Gdiplus::Rect(0, 0,image.GetWidth(), image.GetHeight()),
        0,
        0,
        image.GetWidth(),
        image.GetHeight(),
        Gdiplus::UnitPixel);

   // 更新显示
   pDC->BitBlt(0, 0,
      frame.cols,
      frame.rows,
      &dc,
      0,
      0,
      SRCCOPY);

   // 清理内存
   dc.SelectObject(oldbmp);
   ReleaseDC(pDC);
}

int main() {
    cv::VideoCapture cap(0);  // 打开摄像头,参数可为视频文件路径或设备编号

    if (!cap.isOpened()) {
        return -1;
    }

    cv::Mat frame;
    
    while (true) {
        cap.read(frame);  // 读取摄像头的帧
        
        if (frame.empty()) {
            break;
        }
        
        DisplayFrame(frame);  // 显示帧
        
        if (cv::waitKey(1) == 'q') {  // 按下 'q' 键退出循环
            break;
        }
    }

    cap.release();  // 关闭摄像头
    cv::destroyAllWindows();  // 关闭窗口

    return 0;
}

以上代码使用 OpenCV 的 VideoCapture 类来获取摄像头的帧,然后将每一帧转换为 GDI+ 的位图格式,并利用 MFC 在窗口中绘制并显示。请注意,此代码只是一个简单示例,你可能需要根据自己的需求进行适当的修改和调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=2595

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?