π ΠΠ°ΠΊ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ python: Π»Π΅Π³ΠΊΠΈΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±
ΠΠ°ΠΊ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² Python?
Π Python ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ OpenCV. ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
import cv2
# ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ
image1 = cv2.imread('image1.jpg')
# ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠΎΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ
image2 = cv2.imread('image2.jpg')
# Π‘ΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
difference = cv2.subtract(image1, image2)
# ΠΡΠ»ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ, ΡΠΎ difference Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΅ΡΠ½ΠΎΠΉ
if cv2.countNonZero(difference) == 0:
print("ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ")
else:
print("ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ")
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ cv2.imread
. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ cv2.subtract
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΅ΡΠ½ΠΎΠΉ (Π²ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0), ΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊΡΠ΅Π»Ρ Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² Python!
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² Python
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π² Python ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠ°Π²Π½ΠΈΡΡ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² Python Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ Pillow.
Π¨Π°Π³ 1: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ Pillow
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Pillow, ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² Python. Π§ΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Pillow, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ pip:
pip install pillow
Π¨Π°Π³ 2: ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Π΄Π²ΡΡ
ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΡΠΈΡ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Image.open()
ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ Pillow, ΡΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ:
from PIL import Image
# ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
image1 = Image.open("image1.jpg")
# ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π²ΡΠΎΡΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ
image2 = Image.open("image2.jpg")
Π¨Π°Π³ 3: Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ
ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π²ΡΡ
ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΠΈΡ
ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ, Π½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΏΡΠΎΡΡΡΡ
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ImageChops.difference()
ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ Pillow. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ°Π·Π½ΠΈΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌΠΈ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π²Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ:
from PIL import Image, ImageChops
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ
diff = ImageChops.difference(image1, image2)
# ΠΡΠΎΠ²Π΅ΡΠΊΠ°, Π΅ΡΡΡ Π»ΠΈ ΡΠ°Π·Π½ΠΈΡΠ°
if diff.getbbox() is None:
print("ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ.")
else:
print("ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ.")
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ getbbox()
, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ ΡΠ°Π·Π½ΠΈΡΡ Π½Π΅Ρ, ΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ "ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ". Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ "ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ".
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΠΎΠ΄ΡΠ»Ρ Pillow ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ImageChops.difference()
Π΄Π»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌΠΈ.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π² Python - ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Pillow. ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π² Python. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ° ΡΡΠ°ΡΡΡ Π±ΡΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄Π»Ρ Π²Π°Ρ ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π² Π²Π°ΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ.