根据请求进行编辑以细化:
我正在使用CV2来比较两个屏幕截图,刷新两个屏幕截图之间的指定时间延迟。如果两个图像之间存在差异(通过减去它们),我会得到不同的像素坐标。
脚本运行
我现在要做的是在屏幕上的这些差异(找到的像素坐标)周围实时绘制框(或突出显示)。不在图像中。就像监控摄像头在摄像机镜头中显示一个围绕运动的绿色框一样,我想这样做,但在用户屏幕上。
我在 python3 中进行图像比较和刷新循环的原因是因为我知道如何在 python 而不是其他语言中做到这一点。我尝试使用绘制一个矩形,但这会打开一个新的"窗口"并绘制一个框。我希望它以非侵入性的方式突出显示屏幕上的内容。到目前为止,这是我唯一尝试过的事情,因为我真的不知道从这里开始。
编辑:
以下是我当前的脚本:
pastebin.com/cYmDNZfv
首先使用如下所示的东西来查找差异,然后使用 OpenCV: 轮廓来获取如此形成的矩形的坐标!我把轮廓部分留给你做!
import cv2
l1 = cv2.imread('1.jpg')
l2 = cv2.imread('2.jpg')
diff1 = cv2.absdiff(l2, l1)
diff1 = cv2.cvtColor(diff1, cv2.COLOR_BGR2GRAY)
cv2.imshow('Difference between images', diff1)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用上面的代码后,您必须检测diff1
图像中的所有可用轮廓,然后使用cv2.rectangle(position,dimensions)
在重要轮廓周围绘制矩形! 有关轮廓的信息,请参阅:https://docs.opencv.org/3.0.0/d4/d73/tutorial_py_contours_begin.html
现在假设有一个特定的比较运行有三个图像:
- 图 1 表示原始屏幕截图。
- 图 2 表示更改/更改的屏幕截图。 图像 3 表示在图像 1 和图像 2 (图像 1 和图像 2)转换为
- 灰度后从图像 2 中减去图像 1 和图像 2 时的(文字)差异。
现在,这是我分解问题的方法。
步骤:
- 例如,派生图像 3 而不是存储它。图像 3 应包含除有更改的区域之外的所有零(或黑色)。您可能需要考虑将负像素值转换为正像素值。
- 运行 if 语句检查以查看图像 3 中所有像素值的总和是否大于 0,以检查是否发生了更改。
- 如果总数大于 0,则将图像 3 分解为非常小的块/单元格(而不是像素)。通过"分解图像 3",我的意思是应用网格并分解成单独的方形块/单元格。请参阅此处的代码以获取帮助。您可以使用此代码派生这些块的坐标。
- 获得坐标后,在每个块上运行循环,以准确指出更改发生的位置。 知道更改发生的位置
- 和相应的坐标后,请使用此处的 CV2 函数在图像 1 或图像 2 上绘制矩形以显示更改发生的位置。 显示带有矩形的图像,该
- 矩形显示可能的更改。
- 将步骤 1 - 6 放在一个有时间延迟的循环中,然后再进入下一个实例运行。