ZBLOG

windows环境C++ opencv每隔200MS获取一张屏幕截图输出

你可以使用OpenCV库和Windows API来实现在Windows环境下每隔200毫秒获取一张屏幕截图并输出。

以下是一个简单的示例代码:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <windows.h>

using namespace std;
using namespace cv;

int main()
{
    while (true) {
        // 获取屏幕尺寸
        int screen_width = GetSystemMetrics(SM_CXSCREEN);
        int screen_height = GetSystemMetrics(SM_CYSCREEN);

        // 创建与屏幕尺寸相同的Mat对象
        Mat screenshot(screen_height, screen_width, CV_8UC3);

        // 获取屏幕设备上下文句柄
        HDC hdc_screen = GetDC(NULL);

        // 创建内存设备上下文,用于将屏幕内容复制到Mat对象中
        HDC hdc_mem = CreateCompatibleDC(hdc_screen);

        // 创建位图,并将其与内存设备上下文相关联
        HBITMAP hbitmap = CreateCompatibleBitmap(hdc_screen, screen_width, screen_height);
        SelectObject(hdc_mem, hbitmap);

        // 将屏幕内容复制到内存设备上下文中
        BitBlt(hdc_mem, 0, 0, screen_width, screen_height, hdc_screen, 0, 0, SRCCOPY);

        // 将位图数据复制到Mat对象中
		BITMAPINFOHEADER bi;
		bi.biSize = sizeof(BITMAPINFOHEADER);
		bi.biWidth = screen_width;
		bi.biHeight = -screen_height;  // 负号表示倒置图像
		bi.biPlanes = 1;
		bi.biBitCount = 24;  // 每个像素3通道,BGR格式
		bi.biCompression = BI_RGB;
		bi.biSizeImage = 0;

        GetDIBits(hdc_mem, hbitmap, 0, screen_height, screenshot.data, (BITMAPINFO*)&bi, DIB_RGB_COLORS);

        // 释放资源
        ReleaseDC(NULL, hdc_screen);
        DeleteObject(hbitmap);
        DeleteDC(hdc_mem);

        // 显示截图
        imshow("Screenshot", screenshot);

        // 等待200毫秒
        waitKey(200);
    }

    return 0;
}

请确保你已经在项目中正确配置了OpenCV库,并链接了相关的依赖库。这个示例代码会每隔200毫秒获取一张屏幕截图并在窗口中显示出来。你可以根据需要对其进行修改和扩展。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?