c++ opencv实现窗口截图
时间: 2023-10-23 18:02:40 浏览: 565
使用OpenCV实现窗口截图的方法如下:
1. 引入OpenCV库和相关的头文件。
```
#include <opencv2/opencv.hpp>
```
2. 使用`cv::imshow()`函数创建一个显示窗口,并将要截图的窗口显示在该窗口中。
```
cv::imshow("Screenshot", cv::Mat::zeros(1, 1, CV_8UC1));
cv::waitKey(1);
```
3. 获取屏幕的像素数据。
```
HWND hwnd = GetForegroundWindow();
HDC hdcScreen = GetDC(hwnd);
HDC hdcMem = CreateCompatibleDC(hdcScreen);
RECT rect;
GetClientRect(hwnd, &rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen, width, height);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, hbmScreen);
BitBlt(hdcMem, 0, 0, width, height, hdcScreen, 0, 0, SRCCOPY);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdcScreen);
```
4. 将像素数据转换为OpenCV的`cv::Mat`对象。
```
cv::Mat screenshot(height, width, CV_8UC4);
GetBitmapBits(hbmScreen, width * height * sizeof(uint32_t), screenshot.data);
```
5. 将截图保存为图像文件。
```
cv::imwrite("screenshot.png", screenshot);
```
6. 清理内存。
```
DeleteObject(hbmScreen);
```
通过以上步骤,我们可以使用OpenCV实现窗口截图并保存为图像文件。
阅读全文