python - OpenCv 窗口在单击时层叠屏幕
问题描述
我编写了这段代码,通过第二次截屏来捕获屏幕画面,但是当单击 OpenCv 窗口时,它会层叠屏幕。
当您将鼠标悬停在 Opencv 窗口上时,它会显示没有一百个重复的屏幕。究竟是什么错误?图片:
使用我制作的类的代码:
from window_capture import Window_Capture
from time import time
import cv2 as cv
import numpy
loop_time = time()
wincap = Window_Capture()
while True:
screenshot = wincap.screenshare()
cv.imshow('Screen', screenshot)
print("FPS {}".format(round(1 / (time() - loop_time))))
loop_time = time()
if cv.waitKey(1) == ord('q'):
print("Capture Ended")
cv.destroyWindow(screenshot)
截屏类:
import pyautogui
import numpy
import cv2 as cv
from time import time
from PIL import ImageGrab
import win32gui, win32ui, win32con
from win32api import GetSystemMetrics
import time
class Window_Capture:
w = 0
h = 0
hwnd = None
def __init__(self, window_name=None):
# checking is windowname exists
if window_name is None:
print("No window set to capture: Setting to active Window")
time.sleep(3)
self.hwnd = win32gui.GetDesktopWindow()
print(win32gui.GetWindowText(win32gui.GetDesktopWindow()))
else:
# self.hwnd = win32gui.FindWindow(None, window_name)
self.hwnd = win32gui.FindWindow(None, window_name)
print("Window Found: Setting to preferred Window")
# define monitor height and width and hwnd
self.w = GetSystemMetrics(0)
self.h = GetSystemMetrics(1)
def screenshare(self):
wDC = win32gui.GetWindowDC(self.hwnd)
dcObj = win32ui.CreateDCFromHandle(wDC)
cDC = dcObj.CreateCompatibleDC()
dataBitMap = win32ui.CreateBitmap()
dataBitMap.CreateCompatibleBitmap(dcObj, self.w, self.h)
cDC.SelectObject(dataBitMap)
cDC.BitBlt((0, 0), (self.w, self.h), dcObj, (0, 0), win32con.SRCCOPY)
signedIntsArray = dataBitMap.GetBitmapBits(True)
img = numpy.frombuffer(signedIntsArray, dtype='uint8')
img.shape = (self.h, self.w, 4)
dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(self.hwnd, wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())
img = img[..., :3]
img = numpy.ascontiguousarray(img)
return img
这个错误阻止我进入图像检测项目的下一部分。
解决方案
您会看到一个级联,因为您反复截取窗口本身的屏幕截图。
就像站在两面镜子之间。
推荐阅读
- c# - Xamarin:共享对话框将关闭时的事件处理程序
- c# - 比较两个列表
> 在 C# 中并获取结果列表 - apache - .htaccess 重定向 301:多个斜杠的问题
- r - 我有一个包含性别、班级和年龄的数据框。我需要一个结果表,给出按性别和班级划分的年龄平均值,平均值与观察值的差异
- git - 如何触发对詹金斯多分支管道的扫描?
- azure-functions - 如何在 Azure Function 中调用 WCF?
- html - 如何解析kml文件以放大地图
- c# - 如何使用退出键暂停/取消暂停游戏?
- python - Julia 等效于 nb_conda_kernels 来区分环境
- airflow - 在气流操作员之间共享大文件