J'ai implémenté ce qui semble être un outil de capture Windows (un programme qui enregistre la zone sélectionnée par glisser-déposer sous forme d'image) en Python. C'est peut-être une mise en œuvre plutôt agressive, mais pardonnez-moi s'il vous plaît.
J'ai téléchargé l'endroit où le programme s'exécute sur Youtube, alors jetez un œil. https://www.youtube.com/watch?v=e2zePSUGwaA
Lorsque j'ai créé le programme de "J'ai essayé de jouer à un jeu de frappe avec Python" publié la dernière fois, il a été capturé sur l'écran . Lorsque je cherchais un moyen intuitif et dynamique d'obtenir les coordonnées en pixels de la zone que je voulais, j'ai pensé qu'un format comme l'outil de snipping Windows serait le meilleur, alors implémentons-le en Python. J'ai pensé.
OS : Windows10 Python Version : 3.5.3
PyQt5, Pillow, OpenCV
main.py
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
import tkinter as tk
from PIL import ImageGrab, Image
import matplotlib.pyplot as plt
import numpy as np
import cv2
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
root = tk.Tk()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
self.setGeometry(0,0,screen_width, screen_height)
self.setWindowTitle("")
self.setWindowOpacity(0.3)
QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.begin = QtCore.QPoint()
self.end = QtCore.QPoint()
print("Capture the screen...")
self.show()
def paintEvent(self, event):
qp = QtGui.QPainter(self)
qp.setPen(QtGui.QPen(QtGui.QColor("black"), 3))
qp.setBrush(QtGui.QColor(128, 128, 255, 128))
qp.drawRect(QtCore.QRect(self.begin, self.end))
def mousePressEvent(self, event):
self.begin = event.pos()
self.end = self.begin
self.update()
def mouseMoveEvent(self, event):
self.end = event.pos()
self.update()
def mouseReleaseEvent(self, event):
self.end = event.pos()
self.close()
x1 = min(self.begin.x(), self.end.x())
y1 = min(self.begin.y(), self.end.y())
x2 = max(self.begin.x(), self.end.x())
y2 = max(self.begin.y(), self.end.y())
img = ImageGrab.grab(bbox=(x1,y1,x2,y2))
img.save("capture.png ")
img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)
cv2.imshow('Captured Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MyWidget()
window.show()
app.aboutToQuit.connect(app.deleteLater)
sys.exit(app.exec_())
ImageGrab
de
Pillow``` pour capturer la zone sélectionnée et l'enregistrer en tant qu'image.OpenCV
.J'ai pu implémenter ce qui semble être un outil de capture Windows en Python.
Recommended Posts