python通过鼠标点击进行图像截图,类似QQ截图

import glob
 
import cv2,os
 
#截图
def cut(img_path,img_id):
    global img, img_name
    img_name = img_id
    img = cv2.imread(img_path)
    img = cv2.resize(img, (3000, 1500))
    cv2.namedWindow('image',0)
    # cv2.resizeWindow('image', 1600, 1600)
    cv2.setMouseCallback('image', on_mouse)
    cv2.imshow('image', img)
    cv2.waitKey(0)
 
def on_mouse(event, x, y, flags, param):
    global img, point1, point2
    img2 = img.copy()
    if event == cv2.EVENT_LBUTTONDOWN:         #左键点击
        point1 = (x,y)
        cv2.circle(img2, point1, 10, (0,255,0), 3)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON):               #按住左键拖曳
        cv2.rectangle(img2, point1, (x,y), (255,0,0), 3)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_LBUTTONUP:         #左键释放
        point2 = (x,y)
        cv2.rectangle(img2, point1, point2, (0,0,255), 3)
        cv2.imshow('image', img2)
        min_x = min(point1[0],point2[0])
        min_y = min(point1[1],point2[1])
        width = abs(point1[0] - point2[0])
        height = abs(point1[1] -point2[1])
        cut_img = img[min_y:min_y+height, min_x:min_x+width]
        cv2.imwrite("E:\\dataset\\PL_crack\\"+str(img_name), cut_img)
        cv2.imshow('cut',cut_img)
 
img_paths = 'E:\\dataset\\PL_crack\\2\\*.jpg'
for img_path in glob.glob(img_paths):
    img_id = os.path.basename(img_path)
    # img_id = img_name.split('.')[0]
    cut(img_path,img_id)

实现QQ游戏连连看的脚本需要用到图像识别和游戏操作的技术。这里提供一个基于Python的脚本,使用了PIL库进行图像处理,以及pyautogui库进行鼠标操作。 首先,我们需要对游戏中的图像进行截取和处理,以便于后续的匹配和操作。可以使用PIL库中的ImageGrab和Image模块进行图像处理和截取。 ```python import os import time from PIL import ImageGrab, Image # 定义截图函数 def screenshot(x1, y1, x2, y2): # 获取屏幕大小 screen = ImageGrab.grab() width, height = screen.size # 截取指定区域 box = (x1, y1, x2, y2) im = screen.crop(box) return im ``` 接下来,我们需要对截取的图像进行匹配,找出相同的图案。可以使用OpenCV进行图像匹配,这里为了简单起见,使用PIL库中的histogram方法进行颜色匹配。 ```python # 定义匹配函数 def match(image1, image2): # 直方图 histogram1 = image1.histogram() histogram2 = image2.histogram() # 计算相似度 similarity = 0 for i in range(len(histogram1)): similarity += min(histogram1[i], histogram2[i]) return similarity ``` 最后,我们需要进行游戏操作,找到相同的图案并进行消除。可以使用pyautogui库进行鼠标操作,找到相同的图案则进行点击。 ```python import pyautogui # 定义游戏操作函数 def play(): # 定义游戏区域 x1, y1 = 350, 200 x2, y2 = 1050, 800 # 定义图案大小和间隔 w, h = 80, 80 gap = 10 # 定义图案列表 images = [] for i in range(1, 9): image = Image.open(os.path.join("images", "{}.png".format(i))) images.append(image) # 循环查找相同的图案并消除 while True: for i in range(len(images)): for j in range(i + 1, len(images)): image1 = images[i] image2 = images[j] for m in range(x1, x2 - w, gap): for n in range(y1, y2 - h, gap): im = screenshot(m, n, m + w, n + h) similarity = match(im, image1) if similarity > 1000: pyautogui.click(m + w / 2, n + h / 2) time.sleep(0.5) similarity = match(im, image2) if similarity > 1000: pyautogui.click(m + w / 2, n + h / 2) time.sleep(0.5) ``` 这里需要注意的是,游戏操作需要在游戏窗口中进行,因此需要将游戏窗口置于最前面,并将游戏区域的坐标进行调整。 以上就是一个基于PythonQQ游戏连连看脚本的实现。需要注意的是,这只是一个简单的示例,实际上游戏中可能存在多种图案、道具等元素,需要进行更加复杂的处理和匹配。因此,这个脚本只作为学习和参考使用,不应该用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值