已解决
python --windows自定义截图(并返回位置信息)
来自网友在路上 165865提问 提问时间:2023-09-22 05:18:21阅读次数: 65
最佳答案 问答题库658位专家为你答疑解惑
依赖:
opencv-python4.0.0.21
pyscreenshot3.1
import cv2
import pyscreenshot as ImageGrab
import numpy as np
import win32clipboard
import win32con
import win32gui
import pygetwindow as gwdef get_rectangle_coordinates():print("请按住鼠标左键并拖动以选择矩形区域,选中后按键盘上回车..")# 获取屏幕截图screenshot = ImageGrab.grab()# 将截图转换为OpenCV图像格式img = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)'''- `winname`:窗口的名称,用于显示图像和选择区域。可以是任意字符串。- `img`:要选择区域的图像。可以是一个NumPy数组或一个OpenCV的Mat对象。- `fromCenter`:一个布尔值,指定选择区域的方式。如果设置为`True`,则选择的区域以鼠标点击的位置为中心;如果设置为`False`,则选择的区域以鼠标点击的位置为起点的矩形。默认值为`False`。- `showCrosshair`:一个布尔值,指定是否显示十字线以帮助选择区域。如果设置为`True`,则显示十字线;如果设置为`False`,则不显示十字线。默认值为`False`。使用`cv2.selectROI()`函数时,你可以根据需要调整这些参数的值。例如,如果你希望选择的区域以鼠标点击的位置为中心,并显示十字线,可以将`fromCenter`设置为`True`,`showCrosshair`设置为`True`。请注意,`cv2.selectROI()`函数会返回一个包含所选区域的矩形的元组,格式为`(x, y, w, h)`,其中`(x, y)`是矩形左上角的坐标,`w`是矩形的宽度,`h`是矩形的高度。你可以使用这些值来提取所选区域。'''# 创建窗口并显示截图cv2.namedWindow("image", cv2.WINDOW_NORMAL)'''- `cv2.WINDOW_NORMAL`:创建一个可调整大小的窗口。- `cv2.WINDOW_AUTOSIZE`:创建一个自适应大小的窗口,窗口的大小将根据图像的大小自动调整。- `cv2.WINDOW_FULLSCREEN`:创建一个全屏窗口。- `cv2.WINDOW_FREERATIO`:创建一个可调整大小的窗口,窗口的宽高比可以自由调整。- `cv2.WINDOW_KEEPRATIO`:创建一个可调整大小的窗口,窗口的宽高比将保持不变。'''cv2.setWindowProperty('image', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)cv2.imshow("image", img)window = gw.getWindowsWithTitle('image')[0] #窗口置顶hwnd = window._hWndwin32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)# 等待用户选择矩形区域rect = cv2.selectROI("image", img, fromCenter=False, showCrosshair=False)cv2.destroyAllWindows()x, y, w, h = rect# 提取所选区域roi = img[y:y + h, x:x + w]cv2.imwrite("selected_roi.jpg", roi) # 保存文件,可以是临时路径return rect
# 获取用户选择的矩形区域坐标
x, y, width, height = get_rectangle_coordinates()
print(f"您选择的矩形区域坐标是:({x}, {y}, {width}, {height})")
示例
import os
import time
import cv2
import keyboard
import pyscreenshot as ImageGrab
import numpy as np
import win32con
import win32gui
import pygetwindow as gw
from loguru import loggerdef get_rectangle_coordinates():logger.success("提示:【请按住win+空格,截图后按回车】")screenshot = ImageGrab.grab()img = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)cv2.namedWindow("image", cv2.WINDOW_NORMAL)cv2.setWindowProperty('image', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)cv2.imshow("image", img)window = gw.getWindowsWithTitle('image')[0]hwnd = window._hWndwin32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)rect = cv2.selectROI("image", img, fromCenter=False, showCrosshair=False)cv2.destroyAllWindows()x, y, w, h = rect# 提取所选区域roi = img[y:y + h, x:x + w]cv2.imwrite("selected_roi.jpg", roi) # 保存文件,可以是临时路径return rectdef on_key(event):if event.name == 'space' and keyboard.is_pressed('win'):print('Win+空格键被按下')keyboard.unhook_all() # 取消注册的按键事件回调函数# 获取用户选择的矩形区域坐标x, y, width, height = get_rectangle_coordinates()print(f"您选择的矩形区域坐标是:({x}, {y}, {width}, {height})")os._exit(0)keyboard.on_press(on_key)
keyboard.wait()
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"python --windows自定义截图(并返回位置信息)":http://eshow365.cn/6-11205-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 美团2024届秋招笔试第一场编程【小美走公路】
- 下一篇: 【Vue3 源码讲解】nextTick