import numpy as np from PIL import ImageGrab import cv2

读取 qq 图片并获取其特征描述符

qq_image = cv2.imread('D:/789/QQ.png') sift = cv2.xfeatures2d.SIFT_create() kp1, des1 = sift.detectAndCompute(qq_image, None)

循环捕获屏幕截图,进行特征匹配

while True: # 获取计算机屏幕的截图 screen_shot = ImageGrab.grab() screen_shot_cv = np.array(screen_shot) screen_shot_rgb = cv2.cvtColor(screen_shot_cv, cv2.COLOR_BGR2RGB)

# 在截图中查找与 qq 图标相似的区域
kp2, des2 = sift.detectAndCompute(screen_shot_rgb, None)
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)

# 筛选出好的匹配点,显示结果
good_matches = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        good_matches.append(m)

if len(good_matches) > 10:
    src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
    dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)
    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
    matchesMask = mask.ravel().tolist()

    h, w, c = qq_image.shape
    pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
    dst = cv2.perspectiveTransform(pts, M)

    # 求出匹配图标的屏幕坐标,打印输出结果
    match_x = (dst[0][0][0] + dst[2][0][0]) / 2
    match_y = (dst[0][0][1] + dst[2][0][1]) / 2

    print('找到相似图标, 坐标为: ({:.0f}, {:.0f})'.format(match_x, match_y))

# 显示截图
cv2.imshow('Capture', screen_shot_cv)

# 检测键盘按键,按下 Q 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

释放窗口和摄像头资源

cv2.destroyAllWindows(

照抄这段代码帮我写一个完整的源代码。利用名为qq的图片找到桌面上相似的图标并输出图标的屏幕坐标。import numpy as npfrom PIL import ImageGrabimport cv2# 读取 qq 图片并获取其特征描述符qq_image = cv2imreadD789QQpngsift = cv2xfeatures2dSIFT_createkp1 des1 = siftdete

原文地址: https://www.cveoy.top/t/topic/eaCc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录