Π Π°Π·Π½ΠΎΠ΅

Python Ρ€Π°Π±ΠΎΡ‚Π° с изобраТСниями: Π˜Π³Ρ€Π°Π΅ΠΌΡΡ с изобраТСниями Π² Python / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π˜Π³Ρ€Π°Π΅ΠΌΡΡ с изобраТСниями Π² Python / Π₯Π°Π±Ρ€

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы прСобразования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² я Ρ€Π΅ΡˆΠΈΠ» Π²Π·ΡΡ‚ΡŒ нСсколько Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстных. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного, ΠΎΠ½Π° ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Π° Π² основном Π½Π° Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ².
ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° для испытаний:

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°
import random
from PIL import Image, ImageDraw #ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. 

mode = int(input('mode:')) #Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ прСобразования. 
image = Image.open("temp.jpg") #ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. 
draw = ImageDraw.Draw(image) #Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ инструмСнт для рисования. 
width = image.size[0] #ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ. 
height = image.size[1] #ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ высоту. 	
pix = image.load() #Π’Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ значСния пиксСлСй.

ΠžΡ‚Ρ‚Π΅Π½ΠΊΠΈ сСрого

Для получСния этого прСобразования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Β«ΡƒΡΡ€Π΅Π΄Π½ΠΈΡ‚ΡŒΒ» ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСл.

if (mode == 0):
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			S = (a + b + c) // 3
			draw.point((i, j), (S, S, S))

БСпия

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сСпию, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Π·ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ β€” Π½ΠΈΠ±ΡƒΠ΄ΡŒ коэффициСнт.
middle = (R + G + B) / 3
ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСла ( R ) = middle + 2 * k
Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСла ( G ) = middle + k
Π’Ρ€Π΅Ρ‚ΡŒΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСла ( B ) = middle

if (mode == 1):
	depth = int(input('depth:'))
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			S = (a + b + c) // 3
			a = S + depth * 2
			b = S + depth
			c = S
			if (a > 255):
				a = 255
			if (b > 255):
				b = 255
			if (c > 255):
				c = 255
			draw.point((i, j), (a, b, c))

depth = 30

НСгатив

Π’Π΅ΠΏΠ΅Ρ€ΡŒ научимся ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅Π³Π°Ρ‚ΠΈΠ².
Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто, достаточно лишь ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСла Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ ΠΈΠ· 255.

if (mode == 2):
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			draw.point((i, j), (255 - a, 255 - b, 255 - c))

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡˆΡƒΠΌΠΎΠ²

Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ совсСм всё просто.
ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ всСгда Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ пиксСлу ΠΊΠ°ΠΊΠΎΠ΅ β€” Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ€Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π§Π΅ΠΌ большС разброс этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚Π΅ΠΌ большС ΡˆΡƒΠΌΠΎΠ².

if (mode == 3):
	factor = int(input('factor:'))
	for i in range(width):
		for j in range(height):
			rand = random.randint(-factor, factor)
			a = pix[i, j][0] + rand
			b = pix[i, j][1] + rand
			c = pix[i, j][2] + rand
			if (a < 0):
				a = 0
			if (b < 0):
				b = 0
			if (c < 0):
				c = 0
			if (a > 255):
				a = 255
			if (b > 255):
				b = 255
			if (c > 255):
				c = 255
			draw.point((i, j), (a, b, c))

factor = 70

Π―Ρ€ΠΊΠΎΡΡ‚ΡŒ

Для рСгулирования яркости ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ пиксСлу ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΎΠ½ΠΎ > 0, Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° становится ярчС, ΠΈΠ½Π°Ρ‡Π΅ Ρ‚Π΅ΠΌΠ½Π΅Π΅.

if (mode == 4):
	factor = int(input('factor:'))
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0] + factor
			b = pix[i, j][1] + factor
			c = pix[i, j][2] + factor
			if (a < 0):
				a = 0
			if (b < 0):
				b = 0
			if (c < 0):
				c = 0
			if (a > 255):
				a = 255
			if (b > 255):
				b = 255
			if (c > 255):
				c = 255
			draw.point((i, j), (a, b, c))

factor = 100

factor = -100

Π§Ρ‘Ρ€Π½ΠΎ β€” Π±Π΅Π»ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС пиксСлы Π½Π°Π΄ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° 2 Π³Ρ€ΡƒΠΏΠΏΡ‹: Ρ‡Π΅Ρ€Π½Ρ‹Π΅ ΠΈ Π±Π΅Π»Ρ‹Π΅.
Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ принадлСТности ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊ Ρ‡Π΅ΠΌΡƒ Π±Π»ΠΈΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСла: ΠΊ Π±Π΅Π»ΠΎΠΌΡƒ Ρ†Π²Π΅Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΊ Ρ‡Ρ‘Ρ€Π½ΠΎΠΌΡƒ.

if (mode == 5):
	factor = int(input('factor:'))
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			S = a + b + c
			if (S > (((255 + factor) // 2) * 3)):
				a, b, c = 255, 255, 255
			else:
				a, b, c = 0, 0, 0
			draw.point((i, j), (a, b, c))

factor = 100

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

БохраняСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ удаляСм ΠΊΠΈΡΡ‚ΡŒ.

image.save("ans.jpg", "JPEG")
del draw

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄

import random
from PIL import Image, ImageDraw  

mode = int(input('mode:'))  
image = Image.open("temp.jpg")  
draw = ImageDraw.Draw(image)  
width = image.size[0]  
height = image.size[1]  	
pix = image.load() 
if (mode == 0):
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			S = (a + b + c) // 3
			draw.point((i, j), (S, S, S))
if (mode == 1):
	depth = int(input('depth:'))
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			S = (a + b + c) // 3
			a = S + depth * 2
			b = S + depth
			c = S
			if (a > 255):
				a = 255
			if (b > 255):
				b = 255
			if (c > 255):
				c = 255
			draw.point((i, j), (a, b, c))
if (mode == 2):
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			draw.point((i, j), (255 - a, 255 - b, 255 - c))
if (mode == 3):
	factor = int(input('factor:'))
	for i in range(width):
		for j in range(height):
			rand = random.randint(-factor, factor)
			a = pix[i, j][0] + rand
			b = pix[i, j][1] + rand
			c = pix[i, j][2] + rand
			if (a < 0):
				a = 0
			if (b < 0):
				b = 0
			if (c < 0):
				c = 0
			if (a > 255):
				a = 255
			if (b > 255):
				b = 255
			if (c > 255):
				c = 255
			draw.point((i, j), (a, b, c))
if (mode == 4):
	factor = int(input('factor:'))
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0] + factor
			b = pix[i, j][1] + factor
			c = pix[i, j][2] + factor
			if (a < 0):
				a = 0
			if (b < 0):
				b = 0
			if (c < 0):
				c = 0
			if (a > 255):
				a = 255
			if (b > 255):
				b = 255
			if (c > 255):
				c = 255
			draw.point((i, j), (a, b, c))
if (mode == 5):
	factor = int(input('factor:'))
	for i in range(width):
		for j in range(height):
			a = pix[i, j][0]
			b = pix[i, j][1]
			c = pix[i, j][2]
			S = a + b + c
			if (S > (((255 + factor) // 2) * 3)):
				a, b, c = 255, 255, 255
			else:
				a, b, c = 0, 0, 0
			draw.point((i, j), (a, b, c))
image.save("ans.jpg", "JPEG")
del draw

Python. Π Π°Π±ΠΎΡ‚Π° с изобраТСниями — wiki Programming Store

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с графичСскими изобраТСниями Π² Python Π΅ΡΡ‚ΡŒ ряд Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π² частности, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Pyllow. Если Ρƒ вас ΡƒΠΆΠ΅ установлСн pip Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Pillow Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π°, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ python -m pip install pillow, которая автоматичСски скачаСт ΠΈ установит Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Для использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ просто ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π·Β  ΠΈΠΌΠΏΠΎΡ€Ρ‚:

Π‘Π°ΠΌΡ‹ΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ классом Π² этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ β€” Image. Π’ΠΎΡ‚ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования, Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π΅Π΅ Π½Π° экранС:

from PIL import Image
img=Image.open(‘d:\\3\\10300013.png’)
img.show()



from PIL import Image

img=Image.open(‘d:\\3\\10300013.png’)

img.show()

ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Python ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΏΡ€Π°Π²Π΄Π°, стандартными срСдствами ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, просто ΠΏΠΎΠΊΠ°Π·Π°Π² ΠΎΠΊΠ½ΠΎ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° изобраТСния, Ρ‚Π°ΠΊΠΎΠ΅:

И Ρ‚Π°ΠΊΠΎΠ΅:

ОбъСдиним ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈ старым:

from PIL import Image
im1 = Image.open(‘d:\\3\\10300013.png’)
im2 = Image.open(‘d:\\3\\10300014.png’)
Image.blend(im1, im2, 50).show()



from PIL import Image

im1 = Image.open(‘d:\\3\\10300013.png’)

im2 = Image.open(‘d:\\3\\10300014.png’)

Image.blend(im1, im2, 50).show()

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” это Π°Π»ΡŒΡ„Π°. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌ, Π·Π°Π΄Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 5:

Или Π²ΠΎΠΎΠ±Ρ‰Π΅ 2:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ совсСм понятно. Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ изобраТСния ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅. Π’ΠΎΡ‚ Ρƒ нас Π΄Π²Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ:

НалоТим ΠΈΡ… Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ blend с Π°Π»ΡŒΡ„ΠΎΠΉ 2:

ПомСняСм мСстами:

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° позволяСт Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ„Π°ΠΉΠ»:

from PIL import Image
from PIL import ImageDraw

text = «This is text»
color = (0, 0, 120)
img = Image.new(‘RGB’, (100, 50), color)
imgDrawer = ImageDraw.Draw(img)
imgDrawer.text((10, 20), text)
img.save(«d:\\1\\pil-example.png»)



from PIL import Image

from PIL import ImageDraw

Β 

text = «This is text»

color = (0, 0, 120)

img = Image.new(‘RGB’, (100, 50), color)

imgDrawer = ImageDraw.Draw(img)

imgDrawer.text((10, 20), text)

img.save(«d:\\1\\pil-example.png»)

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ сдСлаСт Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

Волько Π½Π° этот Ρ€Π°Π· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Π½Π° экран Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ, Π° Π² Ρ„Π°ΠΉΠ» ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ.

Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ‚ΠΈΠΏ, Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния:

from PIL import Image
from PIL import ImageDraw

img = Image.open(‘d:\\3\\lena.jpg’) #ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ
size = img.size #Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
format = img.format #Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
mode = img.mode #ΠΌΠΎΠ΄(RGBA…)
arr = [] #создаСм пустой массив
arr.append(size) #добавляСм Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² массив
arr.append(format) #добавляСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² массив
arr.append(mode) #добавляСм мод в массив
print(arr) #Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ массив



from PIL import Image

from PIL import ImageDraw

Β 

img = Image.open(‘d:\\3\\lena.jpg’) #ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ

size = img.size #Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ

format = img.format #Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ

mode = img.mode #ΠΌΠΎΠ΄(RGBA…)

arr = [] #создаСм пустой массив

arr.append(size)Β Β #добавляСм Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² массив

arr.append(format) #добавляСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² массив

arr.append(mode)  #добавляСм мод в массив

print(arr) #Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ массив

Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, для этого достаточно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π€ΠΎΡ€ΠΌΠ°Ρ‚ опрСдСляСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅:

from PIL import Image
from PIL import ImageDraw

img = Image.open(‘d:\\3\\lena.jpg’) #ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ
img.save(‘d:\\3\\test.gif’)



from PIL import Image

from PIL import ImageDraw

Β 

img = Image.open(‘d:\\3\\lena.jpg’) #ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ

img.save(‘d:\\3\\test.gif’)

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ гСомСтричСскиС прСобразования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° ΡƒΠ³ΠΎΠ»:

from PIL import Image
from PIL import ImageDraw

img = Image.open(‘d:\\3\\lena.jpg’) #ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ
out = img.resize((128, 128))
out = img.rotate(25) # degrees counter-clockwise
out.show()



from PIL import Image

from PIL import ImageDraw

Β 

img = Image.open(‘d:\\3\\lena.jpg’) #ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ

out = img.resize((128, 128))

out = img.rotate(25) # degrees counter-clockwise

out.show()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

На этом ΠΏΠΎΠΊΠ° всС, Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ слСдуСт.

Π Π°Π±ΠΎΡ‚Π° с изобраТСниями Π² Python

PIL β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Python, которая прСдоставляСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python возмоТности рСдактирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Он Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π€Ρ€Π΅Π΄Ρ€ΠΈΠΊΠΎΠΌ Π›ΡƒΠ½Π΄ΠΎΠΌ ΠΈ нСсколькими Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ участниками. Pillow β€” это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ PIL-Ρ„ΠΎΡ€ΠΊ ΠΈ простая Π² использовании Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, разработанная АлСксом ΠšΠ»Π°Ρ€ΠΊΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ участниками. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠ΄ΡƒΡˆΠΊΠΎΠΉ.

Установка:

  • Linux: Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Linux Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:
    pip install Pillow

    Установка пипса Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»:

    sudo apt-get update
    sudo apt-get install python-pip
  • Windows: Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Pillow Π² соотвСтствии с вашСй вСрсиСй Python. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π² соотвСтствии с ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ Ρƒ вас вСрсиСй Python.

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Image, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт класс с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ прСдоставляСт мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нашими изобраТСниями. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Image, наш ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки:

 from PIL import Image

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с изобраТСниями:

  • ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡƒΡ‚ΠΈ:

    Β Β Β 

    try:Β 

    Β Β Β Β imgΒ  = Image.open(path)Β 

    except IOError:

    Β Β Β Β pass

  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния . Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹Π΅ экзСмпляры класса Image ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² являСтся Ρ€Π°Π·ΠΌΠ΅Ρ€.

    from PIL import Image

    Β Β 

    filename = "image.png"

    with Image.open(filename) as image:

    Β Β Β Β width, height = image.size

    НСкоторыС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹: Image.width, Image.height, Image.format, Image.info ΠΈ Ρ‚. Π”.

  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ внСсли Π² Ρ„Π°ΠΉΠ» изобраТСния, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ изобраТСния.

    img.save(path, format)Β Β Β Β 

  • ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ изобраТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΡƒΠ³ΠΎΠ» Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния.

    from PIL import Image

    Β Β 

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = img.rotate(180)Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img.save("rotated_picture.jpg")

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ качСствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° rotate доступСн Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Ссли Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ достаточно большим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
    Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π°, я использовал ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Π³Π΄Π΅ ΠΌΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ находится Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π° Python, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ.

  • ΠžΠ±Ρ€Π΅Π·ΠΊΠ° изобраТСния: Image.crop (ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½ΡƒΡŽ (Π»Π΅Π²ΡƒΡŽ, Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ, ΠΏΡ€Π°Π²ΡƒΡŽ, ниТнюю) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ пиксСля ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠ· использованного изобраТСния.

    from PIL import Image

    Β Β 

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")

    Β Β Β Β Β Β Β Β width, height = img.size

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β area = (0, 0, width/2, height/2)

    Β Β Β Β Β Β Β Β img = img.crop(area)

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img.save("cropped_picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

  • ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° изобраТСния: Image.resize (Ρ€Π°Π·ΠΌΠ΅Ρ€) β€” здСсь Ρ€Π°Π·ΠΌΠ΅Ρ€ указываСтся Π² Π²ΠΈΠ΄Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈ высоты Π² 2 ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

    from PIL import Image

    Β Β 

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")

    Β Β Β Β Β Β Β Β width, height = img.size

    Β Β Β 

    Β Β Β Β Β Β Β Β img = img.resize((width/2, height/2))

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img.save("resized_picture.jpg")Β 

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

  • Вставка изобраТСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 2-ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π°) ΠΈΠ»ΠΈ 4-ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (слСва, свСрху, справа, снизу) β€” Π² этом случаС Ρ€Π°Π·ΠΌΠ΅Ρ€ вставляСмого изобраТСния Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ этой области Π±Π»ΠΎΠΊΠ°, ΠΈΠ»ΠΈ НСт, Ρ‡Ρ‚ΠΎ эквивалСнтно (0, 0).

    from PIL import Image

    Β Β 

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img2 = Image.open("picture2.jpg")Β 

    Β Β Β Β Β Β Β Β img.paste(img2, (50, 50))

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img.save("pasted_picture.jpg")

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

    Β Β 

  • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ гистограммы изобраТСния. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ гистограмму изобраТСния Π² Π²ΠΈΠ΄Π΅ списка количСства пиксСлСй, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль изобраТСния. (Гистограмма изобраТСния β€” это графичСскоС прСдставлСниС Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ распрСдСлСния Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Оно содСрТит всС значСния яркости, содСрТащиСся Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. Оно ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ количСство пиксСлСй для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния яркости. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ настройки экспозиции. .)
    ΠΈΠ· PIL import Image

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β print img.histogram()

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

  • ВранспонированиС изобраТСния: эта функция Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ изобраТСния

    Β Β Β Β from PIL import Image

    Β Β 

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β transposed_img = img.transpose(Image.FLIP_LEFT_RIGHT)

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β transposed_img.save("transposed.jpg")

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

  • Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ полосы. ΠŸΡ€ΠΈ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ изобраТСния Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ RGB ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Ρ… изобраТСния, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит копию исходных ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… полос.

    from PIL import Image

    Β Β 

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β print img.split()

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

  • tobitmap: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ изобраТСния Π² растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ X11 (простой тСкстовый Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ изобраТСния). Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ растровоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ X11, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«1Β», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с 1-Π±ΠΈΡ‚Π½Ρ‹ΠΌ пиксСлСм.
    ΠΈΠ· PIL import Image

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β print img.mode

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β print img.tobitmap()

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β print type(img.tobitmap())

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Ρ‹. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ создаСт ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ изобраТСния. Он Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния, ΠΎΠ½ вносит измСнСния Π½Π° мСстС самого ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° изобраТСния. Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния, создайтС копию, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Ρ†Π΅Π»Π΅ΡΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ поддСрТания ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ сторон изобраТСния Π² соотвСтствии с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ.
    ΠΈΠ· PIL import Image

    def main():

    Β Β Β Β try:

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img = Image.open("picture.jpg")Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img.thumbnail((200, 200))Β 

    Β Β Β Β Β Β Β Β Β Β 

    Β Β Β Β Β Β Β Β img.save("thumb.jpg")

    Β Β Β Β except IOError:

    Β Β Β Β Β Β Β Β pass

    Β Β 

    if __name__ == "__main__":

    Β Β Β Β main()

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ прСдоставлСна ΠœΠΎΡ…ΠΈΡ‚ΠΎΠΌ Агарвалом . Если Π²Ρ‹ ΠΊΠ°ΠΊ GeeksforGeeks ΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ внСсти свой Π²ΠΊΠ»Π°Π΄, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ contribute.geeksforgeeks.org ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΡ‡Ρ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ [email protected]. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ свою ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΡƒΡŽΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС GeeksforGeeks, ΠΈ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²ΡƒΠ½Π΄Π΅Ρ€ΠΊΠΈΠ½Π΄Π°ΠΌ.

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Ссли Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ обсуТдаСмой Π²Ρ‹ΡˆΠ΅ Ρ‚Π΅ΠΌΠ΅.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ посты:

Π Π°Π±ΠΎΡ‚Π° с изобраТСниями Π² Python

0.00 (0%) 0 votes

Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PIL. Π Π°Π±ΠΎΡ‚Π° с изобраТСниями Π² Python

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями Π² Python Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ PIL (Python Image Library). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрим Π±Π°Π·ΠΎΠ²Ρ‹Π΅ возмоТности Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, примСняСмыС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто. Для установки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ скачивайтС Ρ„Π°ΠΉΠ» PIL-1.2.6.win32-py2.6.exe с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π° Π·Π°Ρ‚Π΅ΠΌ запускайтС ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡƒΡŽ для вас установку. ΠŸΡ€ΠΎΡ†Π΅ΡΡ установки ΠΎΡ‡Π΅Π½ΡŒ прост ΠΈ Π² коммСнтариях Π½Π΅ нуТдаСтся. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΡƒΠ΄Π°Ρ‡Π½ΠΎ Π»ΠΈ ΠΎΠ½Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ, Π² ΠΎΠΊΠ½Π΅ Python Shell Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° IDLE Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

>>> from PIL import Image
>>> Image.VERSION
'1.1.6'

Если Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ Ссли вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ другая, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π° Π½Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΉ, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠ½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ.

Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ пяти Π»Π΅Ρ‚ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄Π°Π΅ΠΌ ΠΏΠΎΠ΄Π°Ρ€ΠΎΡ‡Π½ΡƒΡŽ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ ΠΎΠΏΡ‚ΠΎΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° подарочная ΠΏΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ†Π΅Π½Π°ΠΌ. Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ сотни Π²ΠΈΠ΄ΠΎΠ² ΠΏΠΎΠ΄Π°Ρ€ΠΎΡ‡Π½ΠΎΠΉ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния

Для открытия Ρ„Π°ΠΉΠ»Π° с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ примСняСтся функция open(). Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ производится дальнСйшая Ρ€Π°Π±ΠΎΡ‚Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Если ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, возбуТдаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IOError. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

open(<ΠŸΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚>[, mode='r'])

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ» Forest-large.jpg, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ располоТСн Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΈ сам скрипт.

>>> img = Image.open("Forest-large.jpg")

ВмСсто указания ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

>>> f = open("foto.gif", "rb") # ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅
>>> img = Image.open(f)        # ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»Π°
>>> img.size                   # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния
(800, 600)
>>> f.close()                  # Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»

Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π² ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля StringIO ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open(). Π―Π·Ρ‹ΠΊ программирования Python ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²ΠΈΠ΄Π΅ΠΎ, ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. Работая Π½Π°Π΄ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ удлинятся всС Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈ Π½Π° малСньком экранС Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ° Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ свою Π·ΠΎΠ½Ρƒ видимости ΠΊΠΎΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΊ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΡƒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ 22 дюймовом ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π° Python ваш Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅ Ρ‡Π΅ΠΌ Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈΠ· строки

>>> f = open("foto.gif", "rb") # ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅
>>> i = f.read()               # БохраняСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
>>> f.close()                  # Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»
>>> import StringIO            # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ StringIO
>>> img = Image.open(StringIO.StringIO(i)) # ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
>>> img.format                 # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ изобраТСния
'GIF'

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ изобраТСния опрСдСляСтся автоматичСски. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ послС открытия Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open() само ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ загруТаСтся сразу Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния производится ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ позволяСт ΠΌΠ΅Ρ‚ΠΎΠ΄ load(). Π₯отя Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Начиная с вСрсии 1.1.6 ΠΌΠ΅Ρ‚ΠΎΠ΄ load() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ пиксСлям изобраТСния.

Python. Π Π°Π±ΠΎΡ‚Π° с изобраТСниями Π² tkinter.

На ΡƒΡ€ΠΎΠΊΠ΅Β Python. Π Π°Π±ΠΎΡ‚Π° с изобраТСниями ΠΌΡ‹ с Π²Π°ΠΌΠΈ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ всяко ΠΈΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ PIL.Β  На ΡƒΡ€ΠΎΠΊΠ΅Β Python. GUI ΠΌΡ‹ с Π²Π°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΒ tkinter создавали Π²ΠΈΠ½Π΄ΠΎΠ²Ρ‹ΠΉ интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: всякиС ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ, Ρ„Π»Π°ΠΆΠΊΠΈ, ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ элСмСнты управлСния. Но Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: Π° нСльзя Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈΒ tkinter ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΠΈΠ½Π΄ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ? МоТно. НапримСр Π²ΠΎΡ‚ такая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

import tkinter
from PIL import Image, ImageTk

root = tkinter.Tk()

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ
frame = tkinter.Frame(root)
frame.grid()

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ
label = tkinter.Label(frame, text=»Hello, World!»).grid(row=1,column=1)


# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ
but = tkinter.Button(frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°»).grid(row=1, column=2)

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
canvas = tkinter.Canvas(root, height=400, width=700)
image = Image.open(«d:/3/Dscn0116.jpg»)
photo = ImageTk.PhotoImage(image)
image = canvas.create_image(0, 0, anchor=’nw’,image=photo)
canvas.grid(row=2,column=1)
root.mainloop()


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import tkinter

from PIL import Image, ImageTk

Β 

root = tkinter.Tk()

Β 

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

frame = tkinter.Frame(root)

frame.grid()

Β 

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ

label = tkinter.Label(frame, text=»Hello, World!»).grid(row=1,column=1)

Β 

Β 

# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ

but = tkinter.Button(frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°»).grid(row=1, column=2)

Β 

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

canvas = tkinter.Canvas(root, height=400, width=700)

image = Image.open(«d:/3/Dscn0116.jpg»)

photo = ImageTk.PhotoImage(image)

image = canvas.create_image(0, 0, anchor=’nw’,image=photo)

canvas.grid(row=2,column=1)

root.mainloop()

выдаст Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ:

Π§Ρ‚ΠΎ интСрСсно, PIL здСсь Π½ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ изобраТСния Ρ‚ΠΈΠΏΠ° jpg, gif-Ρ‹ ΠΈ png ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ:

import tkinter

root = tkinter.Tk()

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ
frame = tkinter.Frame(root)
frame.grid()

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ
label = tkinter.Label(frame, text=»Hello, World!»).grid(row=1,column=1)


# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ
but = tkinter.Button(frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°»).grid(row=1, column=2)

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
canvas = tkinter.Canvas(root, height=400, width=700)
img = tkinter.PhotoImage(file = ‘d:/3/Dscn0116.png’)
image = canvas.create_image(0, 0, anchor=’nw’,image=img)
canvas.grid(row=2,column=1)
root.mainloop()


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import tkinter

Β 

root = tkinter.Tk()

Β 

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

frame = tkinter.Frame(root)

frame.grid()

Β 

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ

label = tkinter.Label(frame, text=»Hello, World!»).grid(row=1,column=1)

Β 

Β 

# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ

but = tkinter.Button(frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°»).grid(row=1, column=2)

Β 

#Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

canvas = tkinter.Canvas(root, height=400, width=700)

img = tkinter.PhotoImage(file = ‘d:/3/Dscn0116.png’)

image = canvas.create_image(0, 0, anchor=’nw’,image=img)

canvas.grid(row=2,column=1)

root.mainloop()

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

import tkinter
from PIL import Image, ImageTk

root = tkinter.Tk()

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ
frame = tkinter.Frame(root)
frame.grid()

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ
label = tkinter.Label(frame, text=»Hello, World!»).grid(row=1, column=1)

image = Image.open(«d://1//DSCN1128.png»)
photo = ImageTk.PhotoImage(image)


def my_event_handler():
print(«my_event_handler»)
image = Image.open(«d://1//original.jpg»)
photo = ImageTk.PhotoImage(image)
image = canvas.create_image(0, 0, anchor=’nw’, image=photo)
canvas.grid(row=2, column=1)


# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ
but = tkinter.Button(frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°», command=my_event_handler).grid(row=1, column=2)

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
canvas = tkinter.Canvas(root, height=400, width=700)
image = canvas.create_image(0, 0, anchor=’nw’, image=photo)
canvas.grid(row=2, column=1)
root.mainloop()


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

import tkinter

from PIL import Image, ImageTk

Β 

root = tkinter.Tk()

Β 

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

frame = tkinter.Frame(root)

frame.grid()

Β 

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ

label = tkinter.Label(frame, text=»Hello, World!»).grid(row=1, column=1)

Β 

image = Image.open(«d://1//DSCN1128.png»)

photo = ImageTk.PhotoImage(image)

Β 

Β 

def my_event_handler():

Β Β Β Β print(«my_event_handler»)

Β Β Β Β image = Image.open(«d://1//original.jpg»)

Β Β Β Β photo = ImageTk.PhotoImage(image)

Β Β Β Β image = canvas.create_image(0, 0, anchor=’nw’, image=photo)

Β Β Β Β canvas.grid(row=2, column=1)

Β 

Β 

# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ

but = tkinter.Button(frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°», command=my_event_handler).grid(row=1, column=2)

Β 

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

canvas = tkinter.Canvas(root, height=400, width=700)

image = canvas.create_image(0, 0, anchor=’nw’, image=photo)

canvas.grid(row=2, column=1)

root.mainloop()

Но Π½Π΅ Ρ‚ΡƒΡ‚ Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ мСняСтся. Π₯отя, казалось Π±Ρ‹, всС написано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈ наш ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, нашС сообщСниС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ print выводится Π² ΠΎΠΊΠ½ΠΎ сообщСний. Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ Π΄Π΅Π»ΠΎ? А Π΄Π΅Π»ΠΎ Π² сборщикС мусора (garbage collector). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ·Β my_event_handler, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ сборщиком мусора. ИмСнно поэтому ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ Π΄ΠΎ наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ. Как ΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ? НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ объявим класс, ΠΏΡƒΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся Π² Π΅Π³ΠΎ полях:

import tkinter
from PIL import Image, ImageTk

class App:
def __init__(self):
self.root = tkinter.Tk()

# создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ
self.frame = tkinter.Frame(self.root)
self.frame.grid()

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ
self.label = tkinter.Label(self.frame, text=»Hello, World!»).grid(row=1, column=1)

self.image = Image.open(«d://1//DSCN1128.png»)
self.photo = ImageTk.PhotoImage(self.image)

# вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ
self.but = tkinter.Button(self.frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°», command=self.my_event_handler).grid(row=1, column=2)

# Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
self.canvas = tkinter.Canvas(self.root, height=600, width=700)
self.c_image = self.canvas.create_image(0, 0, anchor=’nw’, image=self.photo)
self.canvas.grid(row=2, column=1)
self.root.mainloop()

def my_event_handler(self):
print(«my_event_handler»)
self.image = Image.open(«d://1//original.jpg»)
self.photo = ImageTk.PhotoImage(self.image)
self.c_image = self.canvas.create_image(0, 0, anchor=’nw’, image=self.photo)
self.canvas.grid(row=2, column=1)

app= App()


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

33

34

import tkinter

from PIL import Image, ImageTk

Β 

class App:

Β Β Β Β def __init__(self):

Β Β Β Β Β Β Β Β self.root = tkinter.Tk()

Β 

Β Β Β Β Β Β Β Β # создаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

Β Β Β Β Β Β Β Β self.frame = tkinter.Frame(self.root)

Β Β Β Β Β Β Β Β self.frame.grid()

Β 

Β Β Β Β Β Β Β Β # Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ

Β Β Β Β Β Β Β Β self.label = tkinter.Label(self.frame, text=»Hello, World!»).grid(row=1, column=1)

Β 

Β Β Β Β Β Β Β Β self.image = Image.open(«d://1//DSCN1128.png»)

Β Β Β Β Β Β Β Β self.photo = ImageTk.PhotoImage(self.image)

Β 

Β Β Β Β Β Β Β Β # вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ

Β Β Β Β Β Β Β Β self.but = tkinter.Button(self.frame, text=»ΠšΠ½ΠΎΠΏΠΊΠ°», command=self.my_event_handler).grid(row=1, column=2)

Β 

Β Β Β Β Β Β Β Β # Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Β Β Β Β Β Β Β Β self.canvas = tkinter.Canvas(self.root, height=600, width=700)

Β Β Β Β Β Β Β Β self.c_image = self.canvas.create_image(0, 0, anchor=’nw’, image=self.photo)

Β Β Β Β Β Β Β Β self.canvas.grid(row=2, column=1)

Β Β Β Β Β Β Β Β self.root.mainloop()

Β 

Β Β Β Β def my_event_handler(self):

Β Β Β Β Β Β Β Β print(«my_event_handler»)

Β Β Β Β Β Β Β Β self.image = Image.open(«d://1//original.jpg»)

Β Β Β Β Β Β Β Β self.photo = ImageTk.PhotoImage(self.image)

Β Β Β Β Β Β Β Β self.c_image = self.canvas.create_image(0, 0, anchor=’nw’, image=self.photo)

Β Β Β Β Β Β Β Β self.canvas.grid(row=2, column=1)

Β 

app= App()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Β 

PIL Π½Π° Python ΠΎΡ‚ простого ΠΊ слоТному / Π₯Π°Π±Ρ€

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ слоТных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, стоит ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стандартныС схСмы, с Ρ‡Π΅Π³ΠΎ я ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½Π°Ρ‡Π°Ρ‚ΡŒ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠ² Ρ†Π²Π΅Ρ‚ΠΎΠ²:

Для старта Π½Π°ΠΌ потрСбуСтся Π΄Π²Π° модуля Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:

from PIL import Image, ImageDraw 

Настроим инструмСнты для ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠΉ дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹:

image = Image.open('test.jpg')  # ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
draw = ImageDraw.Draw(image)  # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ инструмСнт для рисования
width = image.size[0]  # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ
height = image.size[1]  # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ высоту
pix = image.load()  # Π’Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ значСния пиксСлСй

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΠΌ

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ изобраТСния Π±ΡƒΠ΄Π΅ΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB. Π’Π°ΠΊΠΆΠ΅ PIL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ 1, L, P, RGB, RGBA, CMYK, YCbCr, LAB, HSV, I, F.

ЗначСния пиксСля Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: (x,y),(red, green, blue), Π³Π΄Π΅ x,y β€” ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Π° числовыС значСния RGB находятся Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 255. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с 8-Π±ΠΈΡ‚Π½Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

ΠžΡ‚Ρ‚Π΅Π½ΠΎΠΊ сСрого

Π‘Π΅Ρ€Ρ‹ΠΉ ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ появляСтся Π² случаС равСнства всСх ΠΏΠ°Π»ΠΈΡ‚Ρ€ Ρ†Π²Π΅Ρ‚ΠΎΠ², поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ срСднСС арифмСтичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ всСх Ρ‚Ρ€Ρ‘Ρ… ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ…:


for x in range(width):
    for y in range(height):
       r = pix[x, y][0] #ΡƒΠ·Π½Π°Ρ‘ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ красного Ρ†Π²Π΅Ρ‚Π° пиксСля
       g = pix[x, y][1] #Π·Π΅Π»Ρ‘Π½ΠΎΠ³ΠΎ
       b = pix[x, y][2] #синСго
       sr = (r + g + b) // 3 #срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
       draw.point((x, y), (sr, sr, sr)) #рисуСм пиксСль

image.save("result.jpg", "JPEG") #Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

НСбольшой Π½ΡŽΠ°Π½ΡΠ§Π΅Π»ΠΎΠ²Π΅Ρ‡Π΅ΡΠΊΠΈΠΉ Π³Π»Π°Π· Ρ€Π°Π·Π½Ρ‹ΠΉ спСктр Ρ†Π²Π΅Ρ‚ΠΎΠ² воспринимаСт ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’ΠΎΡ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π²Π°ΠΌ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ даст, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ восприятиС Ρ†Π²Π΅Ρ‚ΠΎΠ² Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Ρƒ всСх Ρ€Π°Π·Π½ΠΎΠ΅, Π½ΠΎ Ссли Π²Π°ΠΌ интСрСсно, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚ ΠΈ Ρ‚ΡƒΡ‚.

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ получаСтся ΠΏΡƒΡ‚Ρ‘ΠΌ Π²Ρ‹Ρ‡Π΅Ρ‚Π° ΠΈΠ· 255 Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π°:


for x in range(width):
   for y in range(height):
      r = pix[x, y][0]
      g = pix[x, y][1]
      b = pix[x, y][2]
      draw.point((x, y), (255 - r, 255 - g, 255 - b))

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ° сСрого

БовмСщая Π΄Π²Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:


for x in range(width):
    for y in range(height):
        r = pix[x, y][0]
        g = pix[x, y][1]
        b = pix[x, y][2]
        sr = (r + g + b) // 3
        draw.point((x, y), (255 - sr, 255 - sr, 255 - sr))

Выборочная инвСрсия ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ° сСрого

Для этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я Π²ΠΎΠ·ΡŒΠΌΡƒ Π·Π° 100:

for x in range(width):
    for y in range(height):
        r = pix[x, y][0]
        g = pix[x, y][1]
        b = pix[x, y][2]
        if (r+g+b)>100: #Ссли сумма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ большС 100 , Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠ½Π²Π΅Ρ€ΠΈΡΡŽ
            sr = (r + g + b) // 3
            draw.point((x, y), (255-sr, 255-sr, 255-sr))
        else: #ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ сСрого
            sr = (r + g + b) // 3
            draw.point((x, y), (sr, sr, sr))

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ локально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ изобраТСния, ΠΏΡƒΡ‚Ρ‘ΠΌ раздСлСния Π΅Π³ΠΎ Π½Π° области, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ интСрСсныС возмоТности DFS Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния

Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python Pillow (Ρ„ΠΎΡ€ΠΊ PIL) ~ PythonRu

PIL, извСстная ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Imaging Library, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями достаточно Π»Π΅Π³ΠΊΠΈΠΌ способом. Π£ PIL Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ развития с 2009. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π΄ΠΎΠ±Ρ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ этого сайта ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Pillow Π΅Ρ‰Π΅ Ρ€Π°Π·. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Pillow.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Pillow?

Pillow это Ρ„ΠΎΡ€ΠΊ PIL (Python Image Library), которая появилась благодаря ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ АлСкса ΠšΠ»Π°Ρ€ΠΊΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… участников. Основана Π½Π° ΠΊΠΎΠ΄Π΅ PIL , Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΈΠ»Π°ΡΡŒ Π² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ, ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ,ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ сохранСнии ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² изобраТСния. МногоС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ PIL.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ установка Pillow

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ использования Pillow, Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅. Pillow доступна для Windows, Mac OS X ΠΈ Linux. Бамая β€œΡΠ²Π΅ΠΆΠ°Ρβ€ вСрсия β€” это вСрсия β€œ5.3.0” ΠΈ ΠΎΠ½Π° поддСрТиваСтся Π½Π° python 2.7 ΠΈ Π²Ρ‹ΡˆΠ΅. Для инсталляции Pillow Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ easy_install ΠΈΠ»ΠΈ pip:

easy_install Pillow
pip install Pillow

Для установки Pillow Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Linux просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

$ sudo pip install Pillow

А установки Pillow Π½Π° Mac OS X Π½ΡƒΠΆΠ½ΠΎ для Π½Π°Ρ‡Π°Π»Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ XCode, Π° Π·Π°Ρ‚Π΅ΠΌ Homebrew. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Homebrew установлСн, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

$ brew install libtiff libjpeg webp littlecms
$ sudo pip install Pillow

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Pillow установлСна

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Pillow установлСна, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строкС:

$ python  
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from PIL import  Image

Если систСма ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ снова >>>, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Pillow ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ установлСны.

Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ использования модуля Pillow, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²: BMP, EPS, GIF, IM, JPEG, MSP, PCX PNG, PPM, TIFF, WebP, ICO, PSD, PDF. НСкоторыС Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для написания. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π°ΠΉΠ»Π° ΠΈ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½ΠΈΡ…, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с руководством ΠΊ Pillow.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Pillow для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ собираСмся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с изобраТСниями, для Π½Π°Ρ‡Π°Π»Π°, скачаСм ΠΎΠ΄Π½ΠΎ. Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, пропуститС этот шаг, описанный Π½ΠΈΠΆΠ΅. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартноС тСстовоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«LennaΒ» ΠΈΠ»ΠΈ Β«LenaΒ». Π­Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… экспСримСнтах ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ сюда ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Если Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ сохранится ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с количСством пиксСлСй 512Γ—512.

ИспользованиС Pillow

ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ ΠΊΠ°Π½Π°Π»Ρ‹

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ находятся Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Image. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры этого класса нСсколькими способами. ΠŸΡƒΡ‚Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ создания ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с нуля. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Pillow, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

from PIL import Image

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ ΠΊ функциям.

myimage = Image.open(filename)  
myimage.load()

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ open ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ myfile.load(). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ, с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π»ΠΎΠΊ try except ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ try except ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

from PIL import Image, ImageFilter  

try:  
	original = Image.open("Lenna.png")  
except FileNotFoundError:  
	print("Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½")

Когда ΠΌΡ‹ считываСм Ρ„Π°ΠΉΠ»Ρ‹ с диска с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(), Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π°. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° автоматичСски опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, основанный Π½Π° содСрТании Ρ„Π°ΠΉΠ»Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Image, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступныС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ format.

print("The size of the Image is: ")  
print(original.format, original.size, original.mode)

Атрибут size β€” это tuple(ΠΊΠΎΡ€Ρ‚Π΅ΠΆ), содСрТащий ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту (Π² пиксСлях). ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ mode: L для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°ΠΌΠΈ сСрого, RGB для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с истинным Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ CMYK для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Lenna.png):

The size of t he Image  is:  
PNG, (512, 512), RGB

Π Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ изобраТСния

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΈ Ρ€Π°Π·ΠΌΠΎΠ΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ТСсткого диска.


from PIL import Image, ImageFilter

try:
	
	original = Image.open("Lenna.png")
except FileNotFoundError:
	print("Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½")


blurred = original.filter(ImageFilter.BLUR)

original.show()
blurred.show()

blurred.save("blurred.png")

Π Π°Π·ΠΌΡ‹Ρ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ‹ использовали ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ show(). Если Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ImageMagick ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ снова.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€

Π•ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Ρ‹ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠœΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½Ρ‹Π΅ вСрсии ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ всС ΠΆΠ΅ содСрТат всС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ аспСкты изобраТСния.

from PIL import Image

size = (128, 128)
saved = "lenna.jpeg"
img = Image.open("Lenna.png")
img.thumbnail(size)
img.save(saved)
img.show()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния скрипта, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π΅:

Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² Pillow

Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Pillow прСдоставляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ изобраТСния:

  • BLUR
  • CONTOUR
  • DETAIL
  • EDGE_ENHANCE
  • EDGE_ENHANCE_MORE
  • EMBOSS
  • FIND_EDGES
  • SMOOTH
  • SMOOTH_MORE
  • SHARPEN

Π’ нашСм послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ CONTOUR ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ нашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΡƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

from PIL import Image, ImageFilter
img = Image.open("Lenna.png")
img = img.filter(ImageFilter.CONTOUR)
img.save("LennaC" + ".jpg")
img.show()

НиТС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ CONTOUR:

10 Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Python

БСгодняшний ΠΌΠΈΡ€ ΠΏΠΎΠ»ΠΎΠ½ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ изобраТСния ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этих Π΄Π°Π½Π½Ρ‹Ρ…. Однако, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, эти Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ изобраТСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ — ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΈΡ… качСство ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована.

ΠžΠ±Ρ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ дисплСи; Π±Π°Π·ΠΎΠ²Ρ‹Π΅ манипуляции, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈ Ρ‚.Π΄ .; сСгмСнтация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, классификация ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ²; восстановлСниС изобраТСния; ΠΈ распознаваниС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.Python — ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ для этих Ρ‚ΠΈΠΏΠΎΠ² Π·Π°Π΄Π°Ρ‡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ·-Π·Π° Π΅Π³ΠΎ растущСй популярности Π² качСствС языка Π½Π°ΡƒΡ‡Π½ΠΎΠ³ΠΎ программирования ΠΈ бСсплатной доступности ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных инструмСнтов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π΅Π³ΠΎ экосистСмС.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ 10 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Python для Π·Π°Π΄Π°Ρ‡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π­Ρ‚ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ простой ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный способ прСобразования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ понимания Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² основС Π΄Π°Π½Π½Ρ‹Ρ….

1. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ scikit

scikit -image — это ΠΏΠ°ΠΊΠ΅Ρ‚ Python с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с массивами NumPy.Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ слуТСбныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для использования Π² исслСдованиях, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… прилоТСниях. Π­Ρ‚ΠΎ довольно простая ΠΈ понятная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄Π°ΠΆΠ΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ Π·Π½Π°ΠΊΠΎΠΌ с экосистСмой Python. Код высококачСствСнный, ΠΏΡ€ΠΎΡˆΠ΅Π» ΡΠΊΡΠΏΠ΅Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ ΠΈ написан Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ сообщСством Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΡ†Π΅Π².

рСсурсов

scikit-image ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ с мноТСством ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования.

ИспользованиС

ΠŸΠ°ΠΊΠ΅Ρ‚ импортируСтся ΠΊΠ°ΠΊ skimage , ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

 

import matplotlib.pyplot as plt
% matplotlib inline

ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° skimage, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚

image = data.coins () # ... ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ массив NumPy!
края = filters.sobel (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)
plt.imshow (края, cmap = 'сСрый')

БопоставлСниС шаблонов с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ match_template:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ большС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² Π³Π°Π»Π΅Ρ€Π΅Π΅.

2. NumPy

NumPy — ΠΎΠ΄Π½Π° ΠΈΠ· основных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Python, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ массивов.Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ — это, ΠΏΠΎ сути, стандартный массив NumPy, содСрТащий пиксСли Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ NumPy, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Ρ€Π΅Π·ΠΊΠ°, маскированиС ΠΈ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ индСксированиС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния пиксСлСй изобраТСния. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ skimage ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Matplotlib.

рСсурсов

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список рСсурсов ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ доступСн Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ NumPy.

ИспользованиС

ИспользованиС Numpy для маскировки изобраТСния:

 import numpy as np 
from skimage import data
import matplotlib.pyplot as plt
% matplotlib встроСнный

image = data.camera ()
Ρ‚ΠΈΠΏ (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)
numpy.ndarray #Image - это массив NumPy:

mask = image <87
image [mask] = 255
plt.imshow (image, cmap = 'gray')

3. SciPy

SciPy — это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· основных Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Python (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NumPy), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для основных Π·Π°Π΄Π°Ρ‡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ частности, ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒ scipy.ndimage (Π² SciPy v1.1.0) прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с n-ΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами NumPy. Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΌΠΎΡ€Ρ„ΠΎΠ»ΠΎΠ³ΠΈΠΈ, интСрполяции B-сплайном ΠΈ измСрСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

рСсурсов

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, прСдоставляСмых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ scipy.ndimage , см. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ИспользованиС

ИспользованиС SciPy для размытия с использованиСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Гаусса:

 

ΠΈΠ· scipy import misc, ndimage

face = misc.face ()
blurred_face = ndimage.gaussian_filter (face, sigma = 3)
very_blurred = ndimage.gaussian_filter (face, sigma = 5)

# Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹
plt.imshow (<ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для отобраТСния>)

4. PIL / ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ°

PIL (Python Imaging Library) — это бСсплатная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для языка программирования Python, которая добавляСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для открытия, управлСния ΠΈ сохранСния мноТСства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Однако Π΅Π³ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π·Π°ΡΡ‚ΠΎΠΏΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, послСдний выпуск Π±Ρ‹Π» Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ Π² 2009 Π³ΠΎΠ΄Ρƒ.К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, сущСствуСт Pillow , Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ разрабатываСмая Π²Π΅Ρ‚Π²ΡŒ PIL, которая ΠΏΡ€ΠΎΡ‰Π΅ Π² установкС, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх основных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Python 3. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° встроСнныС ядра свСртки ΠΈ прСобразования Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ пространства.

рСсурсов

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ инструкции ΠΏΠΎ установкС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ИспользованиС

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ изобраТСния Π² Pillow с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ImageFilter:

 

ΠΈΠ· PIL import Image, ImageFilter
#Read image
im = Image.open ('image.jpg')
#Display image
im.show ()

ΠΈΠ· PIL import ImageEnhance
enh = ImageEnhance.Contrast (im)
enh.enhance (1.8) .show («На 30% большС контраста»)

5. OpenCV-Python

OpenCV (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ) — ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния. OpenCV-Python — это Python API для OpenCV. OpenCV-Python Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ быстр, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΠΎΠ½ состоит ΠΈΠ· ΠΊΠΎΠ΄Π°, написанного Π½Π° C / C ++, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ (благодаря ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΌ ΠΏΠ»Π°Π½Π΅).Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ для выполнСния рСсурсоСмких ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния.

рСсурсов

OpenCV2-Python-Guide ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с OpenCV-Python.

ИспользованиС

ИспользованиС смСшивания ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с использованиСм ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄ Π² OpenCV-Python для создания Β«OrappleΒ»:

6. SimpleCV

SimpleCV — Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° срСда с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния. Он ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ доступ ΠΊ нСскольким ΠΌΠΎΡ‰Π½Ρ‹ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ OpenCV, Π½ΠΎ Π±Π΅Π· нСобходимости Π·Π½Π°Ρ‚ΡŒ ΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Π΅, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… пространствах ΠΈ Ρ‚. Π”.Π•Π³ΠΎ кривая обучСния сущСствСнно мСньшС, Ρ‡Π΅ΠΌ Ρƒ OpenCV, ΠΈ (ΠΊΠ°ΠΊ гласит Π΅Π³ΠΎ слоган) «это ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅ стало ΠΏΡ€ΠΎΡ‰Π΅Β». НСкоторыС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ SimpleCV:

  • Π”Π°ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ простыС тСсты машинного зрСния
  • Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΌΠ΅Ρ€, Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

РСсурсы

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ докумСнтация ΠΎΡ‡Π΅Π½ΡŒ проста Π² использовании ΠΈ содСрТит мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования.

ИспользованиС

7.ΠœΠ°Ρ…ΠΎΡ‚Ρ‹

Mahotas — Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для Python. Он содСрТит Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈ морфологичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ соврСмСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния для вычислСния ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ интСрСса ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ дСскрипторы. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ написан Π½Π° Python, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для быстрой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π° C ++ ΠΈ настроСны Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠœΠ°Ρ…ΠΎΡ‚Π°ΡΠ° быстрая, с минималистичным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π΄Π°ΠΆΠ΅ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ зависимостями.ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС.

рСсурсов

ДокумСнтация содСрТит инструкции ΠΏΠΎ установкС, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ Π΄Π°ΠΆΠ΅ нСсколько руководств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Mahotas.

ИспользованиС

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Mahotas для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ простой ΠΊΠΎΠ΄. НапримСр, ΠΎΠ½ Ρ…ΠΎΡ€ΠΎΡˆΠΎ справляСтся с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Finding Wally с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством ΠΊΠΎΠ΄Π°.

РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π’ поисках Π£ΠΎΠ»Π»ΠΈ:

8. SimpleITK

ITK (Insight Segmentation and Registration Toolkit) — это кроссплатформСнная систСма с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, которая прСдоставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструмСнтов для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. SimpleITK — это ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, созданный ΠΏΠΎΠ²Π΅Ρ€Ρ… ITK, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для облСгчСния Π΅Π³ΠΎ использования Π² быстром ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ [ΠΈ] ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языках Β». Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ инструмСнтов для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с большим количСством ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ , ΠΈ рСгистрация. SimpleITK написан Π½Π° C ++, Π½ΠΎ доступСн для большого количСства языков программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Python.

рСсурсов

БущСствуСт большоС количСство Jupyter Notebooks, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… использованиС SimpleITK Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ использованиС SimpleITK для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с использованиСм языков программирования Python ΠΈ R.

ИспользованиС

Визуализация ТСсткого процСсса рСгистрации CT / MR, созданного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SimpleITK ΠΈ Python:

9. pgmagick

pgmagick — это основанная Π½Π° Python ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GraphicsMagick. БистСму ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ GraphicsMagick ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ШвСйцарским армСйским Π½ΠΎΠΆΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π•Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΈ эффСктивный Π½Π°Π±ΠΎΡ€ инструмСнтов ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ изобраТСниями Π² Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 88 основных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM ΠΈ TIFF.

рСсурсов

Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub

pgmagick Π΅ΡΡ‚ΡŒ инструкции ΠΏΠΎ установкС ΠΈ трСбования. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ИспользованиС

ΠœΠ°ΡΡˆΡ‚Π°Π± изобраТСния:

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠΌΠΎΠΊ:

10. ΠŸΠΈΠΊΠ°ΠΈΡ€

Pycairo — это Π½Π°Π±ΠΎΡ€ привязок Python для графичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Cairo. Cairo — это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° 2D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ для рисования Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. ВСкторная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° интСрСсна Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ тСряСт чСткости ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ трансформации.Pycairo ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Cairo ΠΈΠ· Python.

рСсурсов

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Pycairo GitHub — Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ рСсурс с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ инструкциями ΠΏΠΎ установкС ΠΈ использованию. БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ руководство ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΏΠΎ Pycairo.

ИспользованиС

РисованиС Π»ΠΈΠ½ΠΈΠΉ, основных Ρ„ΠΎΡ€ΠΌ ΠΈ Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Pycairo:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΈ свободно доступных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Python. НСкоторыС ΠΈΠ· Π½ΠΈΡ… Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстны, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ для вас Π½ΠΎΠ²Ρ‹ΠΌΠΈ.ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… большС!

.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ изобраТСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Python

Π’ ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎ совСтах ΠΏΠΎ экономии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для питонистов я ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π», Ρ‡Ρ‚ΠΎ Python — это язык, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ любовь Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ этого — количСство экономящих врСмя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, доступных для этого языка. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Python (PIL), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ посвящСна данная ΡΡ‚Π°Ρ‚ΡŒΡ.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PIL

PIL — это бСсплатная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая добавляСт возмоТности ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ваш ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, поддСрТивая ряд Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ PPM, PNG, JPEG, GIF, TIFF ΠΈ BMP.

PIL ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько стандартных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ / манипулирования изобраТСниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ Π½Π° основС пиксСлСй
  • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° маскирования ΠΈ прозрачности
  • Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅, ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, сглаТиваниС, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°Π΅Π²)
  • ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ изобраТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ рСзкости, Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° яркости, контрастности)
  • гСомСтричСскиС, Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСобразования
  • Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тСкста ΠΊ изобраТСниям
  • Π²Ρ‹Ρ€Π΅Π·ΠΊΠ°, вставка ΠΈ объСдинСниС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
  • созданиС ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€.

PIL ΠΈ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ°

Одна ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с PIL Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ самая послСдняя вСрсия, 1.1.7, Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° Π² 2009 Π³ΠΎΠ΄Ρƒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Python 1.5.2–2.7. Π₯отя сайт PIL ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ для Python 3.X, Π΅Π³ΠΎ послСдняя фиксация Π±Ρ‹Π»Π° Π² 2011 Π³ΠΎΠ΄Ρƒ, ΠΈ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Ρ‹Π»Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Python 3.X Π½Π΅ всС потСряно. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Pillow Ρ€Π°Π·Π²Π΅Ρ‚Π²ΠΈΠ» Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ PIL ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Python 3.X. Учитывая, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Python 3.X, Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Pillow.

Установка ΠΏΠΎΠ΄ΡƒΡˆΠΊΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Pillow ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ вСрсии Python Π΄ΠΎ Python 2.4, я ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΡƒΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° установкС Pillow, Π° Π½Π΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ старой вСрсии PIL.

Python Π½Π° Mac

Π’ настоящСС врСмя я ΠΏΠΈΡˆΡƒ это руководство для Mac OS X Yosemite 10.10.5 ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠΏΠΈΡˆΡƒ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Pillow Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Mac OS X. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Π² ΠΊΠΎΠ½Ρ†Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π° я Π΄Π°ΠΌ ссылку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ описываСтся, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Pillow Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах.

Π― просто Ρ…ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Mac OS X поставляСтся с прСдустановлСнным Python. Однако, скорСС всСго, это Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ранняя вСрсия, Ρ‡Π΅ΠΌ 3.X.

НапримСр, Π½Π° ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ $ python --version Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ Python 2.7.10 .

Python ΠΈ pip

ΠžΡ‡Π΅Π½ΡŒ простой способ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΡƒΡˆΠΊΡƒ — Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΈΠΏ.

Если Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π½Π΅ установлСн pip, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² своСм Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, ΠΈ всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ:

  $ sudo easy_install pip  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Pillow, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² свой Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  $ sudo pip install ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ°  

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

Как я ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», инструкции ΠΏΠΎ установкС Pillow Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ нСсколько простых Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PIL.

Π― ΠΏΡ€ΠΎΠ²Π΅Π΄Ρƒ эти тСсты Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ этим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ самая основная опСрация Π² Π·Π°Π΄Π°Ρ‡Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Π‘ PIL это Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  ΠΈΠ· PIL import Image
img = Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ('brick-house.png')  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ img — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния PIL, созданный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ open () , которая являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ модуля PIL Image .

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠ»ΠΈ ΠΈΠ· строки, ΠΈΠ»ΠΈ ΠΈΠ· tar-Π°Ρ€Ρ…ΠΈΠ²Π°.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ изобраТСния Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΈ сСрого, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ сохранСниС

Π€Π°ΠΉΠ» brick-house.png прСдставляСт собой Ρ†Π²Π΅Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΈ сСрого, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  ΠΈΠ· PIL import Image
img = Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.open ('ΠΊΠΈΡ€ΠΏΠΈΡ‡-Π΄ΠΎΠΌ.png'). convert ('L')
img.show ()
img.save ('ΠΊΠΈΡ€ΠΏΠΈΡ‡-Π΄ΠΎΠΌ-gs', 'png')  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ использовали Ρ‚Ρ€ΠΈ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для выполнСния этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: convert () , show () ΠΈ save () . ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ L использовался с convert () .

Π’ΠΎΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ изобраТСния

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ png .Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ jpg . Π­Ρ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ save () , ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ использовали для сохранСния нашСго Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° (записи Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° диск) Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅:

  ΠΈΠ· PIL import Image
img = Image.open ('brick-house.png')
img.save ('ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-ΠΊΠΈΡ€ΠΏΠΈΡ‡', 'jpeg')  

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния

Π Π°Π·ΠΌΠ΅Ρ€ (Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹) нашСго исходного изобраТСния — 440 x 600 пиксСлСй. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 256 x 256 пиксСлСй, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  ΠΈΠ· PIL import Image
img = Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ('brick-house.png')
new_img = img.resize ((256,256))
new_img.save ('ΠΊΠΈΡ€ΠΏΠΈΡ‡Π½Ρ‹ΠΉ-Π΄ΠΎΠΌ-256x256', 'png')  

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, это сТимаСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², Π° Π½Π΅ ΠΎΠ±Ρ€Π΅Π·Π°Π΅Ρ‚ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, сохраняя ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡΠ½ΡƒΡ‚ΡŒΡΡ повСрхности PIL ΠΈ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, насколько Π»Π΅Π³ΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π² Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ PIL.

МногиС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, описаны Π² ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Pillow, Π³Π΄Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ…, описанных Π²Ρ‹ΡˆΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ руководства.

Π― надСюсь, Ρ‡Ρ‚ΠΎ это Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Π΄ΠΎΡ…Π½ΠΎΠ²ΠΈΠ»ΠΎ вас ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ изобраТСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python. Π Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π²Π΅ΡΠ΅Π»ΠΈΡ‚ΡŒΡΡ!

.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с изобраТСниями Π² Python ΠΈ OpenCV: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅), ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈ ΠΎΠ±Ρ€Π΅Π·ΠΊΠ°

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ для этого руководства ΠΈ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… 400+ руководств ΠΏΠΎ PyImageSearch.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ …

  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π² Π±Π»ΠΎΠ³Π΅ PyImageSearch
  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Jupyter Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств
  • Π£Π³Π»ΡƒΠ±Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ для всСх Π½ΠΎΠ²Ρ‹Ρ… сообщСний Π² Π±Π»ΠΎΠ³Π°Ρ… — эти Π²ΠΈΠ΄Π΅ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ совСты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽ Π² тСкстовыС вСрсии ΠΌΠΎΠΈΡ… руководств

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ:

Π― использовал Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΡˆΠΈΡ… руководств для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ возникшСй Ρƒ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Python ΠΈ OpenCV.Боролся с этим Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ, Π½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… экспСртов Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ я нашСл …. Π˜ΡΠΏΡ€Π°Π²ΠΈΠ» Π·Π° Π΄Π²Π° часа. И это Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ критичСски Π²Π°ΠΆΠ½ΠΎ. Π’Π°ΡˆΠΈ Π²Π΅Ρ‰ΠΈ качСствСнныС!

Исмаил Вомас-Π‘Π΅Π½Π³Π΅ Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ качСства ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€

PyImageSearch Plus — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ для этого руководства ΠΈ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… 400 руководств ΠΏΠΎ PyImageSearch!

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ свой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ Π½ΠΈΠΆΠ΅ …

$ 4.95 / мСс

49,50 $ / год (экономия 15%)

  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π½Π° PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для ВсС Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ для ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”.

$ 14.95 / мСс

149,50 $ / год (экономия 15%)

  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Jupyter Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠ²
  • ЗапускайтС всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π² своСм Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. — Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Windows, macOS ΠΈ Linux.
  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π½Π° PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для ВсС Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ для ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”.

$ 74.95 / мСс

749,50 $ / год (экономия 15%)

  • Π’ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ для всСх Π½ΠΎΠ²Ρ‹Ρ… сообщСний Π² Π±Π»ΠΎΠ³Π΅
  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Jupyter Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠ²
  • ЗапускайтС всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π² своСм Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. — Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Windows, macOS ΠΈ Linux.
  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π½Π° PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для ВсС Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ для ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”.
  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400+ руководств Π² Π±Π»ΠΎΠ³Π΅ PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для ВсС Π½ΠΎΠ²Ρ‹Π΅ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ пособия , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник Π² 10:00 EST
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ для исходного ΠΊΠΎΠ΄Π°, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Ρ‚. Π”.
  • ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² любоС врСмя
  • Π›Π΅Π³ΠΊΠΈΠΉ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ, Π½Π°Π±ΠΎΡ€Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ модСлям для всСх 400+ руководств Π² Π±Π»ΠΎΠ³Π΅ PyImageSearch
  • Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ использованиС Jupyter Notebooks Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° PyImageSearch
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Google Colab — большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³ΠΎΠ»ΠΎΠ²Π½Ρ‹Ρ… Π±ΠΎΠ»Π΅ΠΉ ΠΈ Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° настройку срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
  • ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ ΠΈ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств ΠΈ руководств
  • Доступ ΠΊ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Ρ… сдСлок ΠΏΠΎ ΠΌΠΎΠΈΠΌ ΠΊΠ½ΠΈΠ³Π°ΠΌ ΠΈ курсам

Π― использовал Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΡˆΠΈΡ… руководств для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ возникшСй Ρƒ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Python ΠΈ OpenCV.Боролся с этим Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ, Π½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… экспСртов Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ я нашСл …. Π˜ΡΠΏΡ€Π°Π²ΠΈΠ» Π·Π° Π΄Π²Π° часа. И это Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ критичСски Π²Π°ΠΆΠ½ΠΎ. Π’Π°ΡˆΠΈ Π²Π΅Ρ‰ΠΈ качСствСнныС!

Исмаил Вомас-Π‘Π΅Π½Π³Π΅ Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ качСства ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€

.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с использованиСм Python

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ситуациСй, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ?

ΠžΡ‡Π΅Π½ΡŒ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ измСнСния ΠΊΠΎ всСм изобраТСниям, это Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Но, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это довольно быстро.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΈΠ³Ρ€Π°Π΅ΠΌ с изобраТСниями.

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ изобраТСния

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.НиТС приводится структура ΠΌΠΎΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π’ ΠΌΠΎΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» Python с ΠΈΠΌΠ΅Π½Π΅ΠΌ ImageManipulation.py ΠΈ Ρ„Π°ΠΉΠ» изобраТСния с ΠΈΠΌΠ΅Π½Π΅ΠΌ PythonImageFromGoogle.PNG.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, находящССся Π² ΠΏΠ°ΠΏΠΊΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

  1. pythinImg = Image.open (‘PythonImageFromGoogle.PNG’)
  2. print (pythinImg.size)
  3. print (pythinImg.format)

Π—Π΄Π΅ΡΡŒ я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· PIL.Π― Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ изобраТСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» вмСстС с Π½ΠΈΠΌ.

Π Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прСдоставят Π²Π°ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ‚ΠΈΠΏ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° изобраТСния соотвСтствСнно.

Π’Ρ‹Π²ΠΎΠ΄

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·?

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π½Π° Python ΠΎΡ‡Π΅Π½ΡŒ просто.

  1. newImage = Image.new (‘RGBA’, (200,150), ‘blue’)
  2. newImage.save (‘newImage.png’)

Β«Image.newΒ» создаст Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ 200 ΠΈ высотой 150. Π¦Π²Π΅Ρ‚ изобраТСния синий.

Β«Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒΒ» сохранит ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ здСсь ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π’Ρ‹Π²ΠΎΠ΄

НиТС прСдставлСна ​​структура ΠΏΠ°ΠΏΠΎΠΊ послС выполнСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°ΠΏΠΊΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ newImage.png.

ΠŸΠΎΠ²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° любой ΡƒΠ³ΠΎΠ», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

  1. pythinImg.rotate (180) .save (‘PythonImageFromGoogle180.PNG’)
  2. pythinImg_180 = Image.open (‘PythonImageFromGoogle180.PNG’)
  3. pythinImg_180.show ()

9000 Π—Π΄Π΅ΡΡŒ вращаСтся пСрвая строка. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 180 градусов ΠΈ сохраняСт Ρ„Π°ΠΉΠ». А Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строкС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ изобраТСния.

Π’Ρ‹Π²ΠΎΠ΄

НиТС прСдставлСна ​​структура ΠΏΠ°ΠΏΠΎΠΊ послС выполнСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» PythonImageFromGoogle180.PNG Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΏΠ°ΠΏΠΊΡƒ.

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π€ΠΈΠ»ΡŒΡ‚Ρ€ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ изобраТСниям, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅.

  1. image_sharp = pythinImg_180.filter (ImageFilter.SHARPEN)
  2. image_sharp.save (‘PythonImageFromGoogle180Sharpen.PNG’)

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΠ°ΠΏΠΊΠΈ

послС выполнСния

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°ΠΏΠΊΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ PythonImageFromGoogle180Sharpen.PNG.

  1. ΠΈΠ· PIL import Image, ImageFilter
  2. pythinImg = Image.open (‘PythonImageFromGoogle.PNG’)
  3. print (pythinImg.size)
  4. print (pythinImg.format)
  5. print (pythinImg.format)
  6. newImage = Image.new (‘RGBA’, (200,150), ‘blue’)
  7. newImage.save (‘newImage.png’)
  8. pythinImg.rotate (180) .save (‘PythonImageFromGoogle180.PNG’)
  9. pythinImg_180 = Image.open (‘PythonImageFromGoogle180.PNG’)
  10. pythinImg_180.show ()
  11. image_sharp = pythinImg_1 (Image_sharp = pythinImg_1)
  12. image_sharp.save (‘PythonImageFromGoogle180Sharpen.PNG’)

Π’Ρ‹Π²ΠΎΠ΄

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅, Π²Π°ΠΌ понравится.Π£Π΄Π°Ρ‡Π½ΠΎΠ³ΠΎ кодирования !!!

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *