我如何看待python中使用pil的两个图像之间的差异?
我正在尝试制作一个程序,从我的macbook相机(或任何相机)上看,让我知道什么时候发生了什么(灯打开/关闭,任何动作等),该程序每1秒拍摄一次屏幕截图,并将最后拍摄的图像与刚刚拍摄的图像进行比较 这是我的while循环中的代码我如何看待python中使用pil的两个图像之间的差异?,python,python-imaging-library,Python,Python Imaging Library,我正在尝试制作一个程序,从我的macbook相机(或任何相机)上看,让我知道什么时候发生了什么(灯打开/关闭,任何动作等),该程序每1秒拍摄一次屏幕截图,并将最后拍摄的图像与刚刚拍摄的图像进行比较 这是我的while循环中的代码 while True: time.sleep(1) image = capture_image() if last_image == None: last_image = image # compare the tw
while True:
time.sleep(1)
image = capture_image()
if last_image == None:
last_image = image
# compare the two images
print('image', image)
print('last image', last_image)
print('')
last_image = image
这将给你两张图像的差异,但你肯定想增加一些公差,也许可以通过统计测量。我不确定你是否想使用实时图像,也许可以通过捕获图像,然后在一秒钟后独立运行脚本来分离你的关注点。但这取决于您的应用目的
from PIL import Image
import numpy as np
image1Url = "./img1.jpg"
image2Url = "./img2.jpg"
image1 = Image.open(image1Url)
image2 = Image.open(image2Url)
analyze_img1 = np.asarray(image1)
analyze_img2 = np.asarray(image2)
substr_img = analyze_img1 - analyze_img2
last_image = Image.fromarray(substr_img)
last_image.show()
你的问题在某种程度上意味着你正处于这个项目的初始阶段,事情有点模糊,所以我只是总结了一些一般性的想法,直到你在这条路上走得更远
cv2.VideoCapture()
以获取您的相机流,查找cv2.imshow()
和cv2.waitKey()
以显示您的帧。PIL不太适合显示动态变化的图像,如视频,而cv2.imshow()
将为您提供更好的服务。此外,您将发现自己正在将PIL图像转换为Numpy数组以进行处理,因此您最好使用OpenCV并直接使用Numpy数组cv2.cvt颜色(…BGR2GRAY…
,并使用np.mean()取平均值。试着运行你的循环,它看起来是正确的,并且在每次迭代时在终端上打印平均值,同时关闭灯。然后,您可以看到它的变化程度,并计算出一个合理的阈值
cv2。调整大小(…最近邻…)
以显示以前和当前帧。然后查看144个图像矩形中每个矩形之间的颜色距离,看看是否有任何矩形超过测试得出的阈值试着开发一下你的代码,获得一些经验,然后如果你遇到问题,回来问另一个问题-问题和答案都是免费的。这里有一个例子来了解两张图片之间的区别。也许它可以解决你的问题
from PIL import Image
from PIL import ImageChops
img1 = Image.open(yourPath)
img2 = Image.open(yourPath)
# make sure img1,img2 have the same picture width and height.
diff = ImageChops.difference(img1, img2)
diff.show()
在你的情况下,这可能有效
from PIL import ImageChops
While True:
time.sleep(1)
.......
diff = ImageChops.difference(Now_Image,Last_Image)
If diff.getbbox() is None:
print("Now_Image and Last_Image are same.")
# diff.show()
# or you can handle the diff picture.
diff
图像将显示这些图片之间的差异。
两张图片之间的差异将显示您,相同的组件将为黑色。您的问题是什么?你有具体的问题吗?一般性的“我该怎么做”问题是离题的。
代码>?为什么是分号?