Pillow 화면 변화 감지(Pixel Checksum) 2
Python 2018. 11. 21. 10:13 |반응형
'Pillow 화면 변화 감지(Pixel Checksum) 1'에서는 모든 픽셀의 값을 확인해서 좌표까지 알아내기 때문에 시간이 오래 걸린다.
ImageStat 모듈을 사용해 모든 픽셀을 확인하지 않고 전체적인 변화 여부만 감지하면 빠르게 확인 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from PIL import Image from PIL import ImageGrab from PIL import ImageChops from PIL import ImageStat import time def PixelCheck(x1, y1, x2, y2): im1 = ImageGrab.grab((x1, y1, x2, y2)) # Take a snapshot of the screen. The pixels inside the bounding box are returned as an “RGB” image # on Windows or “RGBA” on macOS. If the bounding box is omitted, the entire screen is copied. while 1: time.sleep(0.1) im2 = ImageGrab.grab((x1, y1, x2, y2)) im = ImageChops.difference(im1, im2) # Returns the absolute value of the pixel-by-pixel difference between the two images. # 마우스로 인한 변경은 반영 되지 않는다. 같은 이미지이면 difference()의 결과 이미지는 모든 픽셀이 0. stat = ImageStat.Stat(im) # Calculate statistics for the given image. If a mask is included, only the regions covered by # that mask are included in the statistics. You can also pass in a previously calculated histogram. if stat.sum != [0, 0, 0]: # Sum of all pixels for each band in the image. print("Change detected: sum[%s]: %s" %(im.getbands().__str__(), stat.sum.__str__())) # Returns a tuple containing the name of each band in this image. For example, getbands on # an RGB image returns (“R”, “G”, “B”). return x1, y1, x2, y2 = map(int, input("Enter x1, y1, x2, y2 values: ").split()) # 추적할 영역의 좌상단, 우하단 좌표 PixelCheck(x1, y1, x2, y2) # x1, y1, x2, y2 = input("Enter x1, y1, x2, y2 values: ").split() # x1 = int(x1) # y1 = int(y1) # x2 = int(x2) # y2 = int(y2) | cs |
반응형
'Python' 카테고리의 다른 글
Pillow 이미지 서치(Image Search) 1 (0) | 2018.11.30 |
---|---|
pywin32 Windows Extensions for Python 2 (0) | 2018.11.27 |
pywin32 Windows Extensions for Python 1 (0) | 2018.11.27 |
Pillow 화면 변화 감지(Pixel Checksum) 1 (0) | 2018.11.20 |
PyMySQL (2) | 2018.11.19 |