中文 opencv DeleteObject
时间: 2023-09-17 22:07:49 浏览: 57
在 OpenCV 中删除对象的方法是使用 `cv2.destroyAllWindows()` 函数。它将关闭所有已经打开的窗口。
另外,如果您想关闭特定的窗口,可以使用 `cv2.destroyWindow(window_name)` 函数,其中 `window_name` 是要关闭的窗口的名称。
示例代码:
```python
import cv2
# 打开一个名为 "image" 的窗口
cv2.imshow("image", image)
# 等待用户按下任意键
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()
# 或者只关闭名为 "image" 的窗口
cv2.destroyWindow("image")
```
相关问题
c++ opencv实现窗口截图
使用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实现窗口截图并保存为图像文件。
qt opencv 录屏代码
可以参考以下代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
#include <chrono>
#include <ctime>
using namespace cv;
using namespace std;
int main() {
// 获取当前时间
auto now = chrono::system_clock::now();
auto now_c = chrono::system_clock::to_time_t(now);
string path = "screen_capture_" + to_string(now_c) + ".avi";
// 获取屏幕分辨率
int screen_width = GetSystemMetrics(SM_CXSCREEN);
int screen_height = GetSystemMetrics(SM_CYSCREEN);
// 创建视频编码器
VideoWriter writer(path, CV_FOURCC('M', 'J', 'P', 'G'), 30, Size(screen_width, screen_height));
if (!writer.isOpened()) {
cout << "无法打开视频文件" << endl;
return -1;
}
// 录屏
Mat frame;
HDC hScreen = GetDC(NULL);
HDC hDC = CreateCompatibleDC(hScreen);
HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, screen_width, screen_height);
HGDIOBJ hOld = SelectObject(hDC, hBitmap);
while (true) {
if (!BitBlt(hDC, 0, 0, screen_width, screen_height, hScreen, 0, 0, SRCCOPY)) {
cout << "无法复制位图" << endl;
return -1;
}
frame.create(screen_height, screen_width, CV_8UC4);
GetBitmapBits(hBitmap, screen_width * screen_height * 4, frame.data);
writer.write(frame);
if (waitKey(1) == 27) {
break;
}
}
// 释放资源
SelectObject(hDC, hOld);
DeleteObject(hBitmap);
DeleteDC(hDC);
ReleaseDC(NULL, hScreen);
return 0;
}
```
希望能对您有所帮助。