在屏幕上的某些像素周围画边框?

时间:2017-12-30 18:08:06

标签: python python-3.x drawrectangle

根据要求进行修改:

我使用CV2比较两个屏幕截图,并刷新两个屏幕截图之间的指定时间延迟。如果两个图像之间存在差异(通过减去它们),我会得到不同的像素坐标。

ScriptRunning

我现在要做的是是在屏幕上实时显示这些差异(找到的像素坐标)的位置周围绘制框(或突出显示)。 不在图像中。就像监控摄像机在摄像机镜头中显示运动周围的绿框一样,我想在用户屏幕上这样做。

我在python3中进行图像比较和刷新循环的原因是因为我知道如何在python中执行它而没有其他语言。我尝试使用乌龟画一个矩形,但这会打开一个新的海龟窗口"并画一个盒子。我希望它以非侵入性的方式突出显示屏幕上的内容。到目前为止,这是我唯一尝试过的,因为我不知道从哪里开始。

编辑:

这是我当前脚本的样子:

pastebin.com/cYmDNZfv

2 个答案:

答案 0 :(得分:0)

首先使用类似下面的内容来找到差异,然后使用OpenCV:Contours来获得如此形成的矩形的坐标!(我已经离开了轮廓部分供您使用!)

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 :(得分:0)

现在假设特定比较运行有三个图像:

  • 图片1代表原始屏幕截图。
  • 图片2代表更改/更改的屏幕截图。
  • 图像3表示在图像1(图像1和图像2)转换为灰度后从图像2中减去图像1时图像1和图像2之间的(字面)差异。

现在,我将如何解决这个问题。

步骤进行:

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