Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在屏幕上的某些像素周围画正方形?_Python_Python 3.x_Drawrectangle - Fatal编程技术网

Python 在屏幕上的某些像素周围画正方形?

Python 在屏幕上的某些像素周围画正方形?,python,python-3.x,drawrectangle,Python,Python 3.x,Drawrectangle,根据细化请求编辑: 我使用CV2比较两个屏幕截图,在刷新两个屏幕截图之间有指定的时间延迟。如果两幅图像之间存在差异(通过减去它们),我会得到不同的像素坐标 我现在想做的是在屏幕上的差异(找到的像素坐标)周围实时绘制框(或高亮显示)不在图像中。就像监控摄像机在摄像机镜头中的运动周围显示一个绿色方框一样,我想这样做,但在用户屏幕上 我之所以在python3中执行图像比较和刷新循环,是因为我知道如何使用python而不是其他语言。我试着用海龟画一个矩形,但这会打开一个新的“海龟窗口”并画一个方框。我

根据细化请求编辑:

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

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

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

编辑:

以下是我当前的脚本:

pastebin.com/cYmDNZfv

首先使用下面类似的方法来找出差异,然后使用OpenCV:Contours来获得这样形成的矩形的坐标!(我把轮廓部分留给你了!)

使用上述代码后,您必须检测
diff1
图像中的所有可用轮廓,然后使用
cv2.rectangle(位置、尺寸)
在重要轮廓周围绘制矩形!
有关轮廓的信息,请参见:

假设目前有三个图像用于特定的比较运行:

  • 图1表示原始屏幕截图
  • 图2表示更改/更改的屏幕截图
  • 图像3表示图像1和图像2转换为灰度后从图像2减去图像1时图像1和图像2之间的(文字)差异
现在,我将如何解决这个问题

步骤:

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

  • 您的问题是否归结为“如何使用Python在屏幕上绘制矩形,或者可能不是Python?”如果您突出显示您正试图实现的目标,并删除所有其他内容(例如关于屏幕抓取的任何无关讨论和长长的坐标示例列表),这将非常有用。这很公平。我只想检查屏幕上是否有任何东西在x(秒)内发生了变化。如果是,请围绕更改的零件绘制矩形。想象一下,当你看到文档、页面或应用程序中有一堆动态文本时,你会说一个或多个单词会在你所在的页面上发生变化。我想在更改的单词周围画一个方框。我之所以选择python,是因为我对它最熟悉。并选择了要比较的图像,因为它可能不总是会更改的文本等。请编辑您的问题以突出显示您需要的内容。听起来你已经知道如何区分两个截图了。所以,除去所有这些,以及任何你不需要帮助的东西。然后详述你错过了什么,以及你做了什么尝试。不是在评论中,而是通过编辑您的问题。原始图像是否显示在非python窗口中?我不知道你怎么能与之互动。另一方面,如果它们是通过基于python的窗口(如TKinter或PyQt窗口)显示的,那么应该有一种方法。我将它们存储在变量中,并动态地进行比较。我宁愿最后根本不保存屏幕。我只是用它们来判断屏幕上的任何东西在最后一秒钟内是否发生了变化。如果有帮助的话,我可以发布我的代码,但是它还没有被“清理”,而且我也不确定它是否有帮助,因为那部分已经开始工作了。谢谢,我正在研究它。。我现在正在读cv2.2矩形。你确定这可以为我想要的工作,它看起来只画周围现有的图像矩形。我希望矩形围绕图像中的差异,但不是图像本身,而是实时围绕屏幕上的坐标,其中图像表示差异。。。根本不想看到图像,也不想用矩形框阻止用户输入……基本上是屏幕上的“运动检测”。有点像你在监控摄像机中看到的,当有运动时,周围有一个绿色的方框。任何图像上都必须形成矩形,你可以在你的
    diff1
    图像上绘制,也可以在拍摄的图像上绘制,或者在空白图像上绘制,完全由你自己选择要绘制的图像。选择后,只需使用
    cv2.rectangle(图像参考\u您选择的,pt1,pt2,颜色[,厚度[,线型[,shift]])
    对不起,您不能直接在屏幕上绘制!好的,谢谢你的建议。Snaggit和其他应用程序使用屏幕
    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()