在屏幕上的某些像素周围绘制正方形?



根据请求进行编辑以细化:

我正在使用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 时的(文字)差异。

现在,这是我分解问题的方法。

步骤:

  1. 例如,派生图像 3 而不是存储它。图像 3 应包含除有更改的区域之外的所有零(或黑色)。您可能需要考虑将负像素值转换为正像素值。
  2. 运行 if 语句检查以查看图像 3 中所有像素值的总和是否大于 0,以检查是否发生了更改。
  3. 如果总数大于 0,则将图像 3 分解为非常小的块/单元格(而不是像素)。通过"分解图像 3",我的意思是应用网格并分解成单独的方形块/单元格。请参阅此处的代码以获取帮助。您可以使用此代码派生这些块的坐标。
  4. 获得坐标后,在每个块上运行循环,以准确指出更改发生的位置。
  5. 知道更改发生的位置
  6. 和相应的坐标后,请使用此处的 CV2 函数在图像 1 或图像 2 上绘制矩形以显示更改发生的位置。
  7. 显示带有矩形的图像,该
  8. 矩形显示可能的更改。
  9. 将步骤 1 - 6 放在一个有时间延迟的循环中,然后再进入下一个实例运行。

相关内容

  • 没有找到相关文章