dlib: ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΌ

Выпуск 2

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠ» Π² Β«FPSΒ» Π² 2017 Π³ΠΎΠ΄Ρƒ. НадССмся, Ρ‡Ρ‚ΠΎ прСдыдущая Ρ‡Π°ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° скоро Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ доступна ΠΎΠ½Π»Π°ΠΉΠ½.

Один ΠΈΠ· самых вострСбованных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² dlib – это dlib.image, ΠΏΠ°ΠΊΠ΅Ρ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями. Он содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… популярных Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ свСртку ядром 3x3. Но Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Ρ‚ΠΎ придСтся Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ boilerplate-ΠΊΠΎΠ΄Π°, связанного с рассчСтом ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ пиксСлСй, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ элСгантно. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… появилась Π² dlib 0.9.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ просто. Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠΉ ΠΆΠ΅ свСртки:

float[3][3] kernel = [ 
    [1, 1, 1], 
    [1, 1, 1], 
    [1, 1, 1], 
]; 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ img, Ρ‚ΠΎ для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ ΠΏΠΎ всСму ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ windows ΠΈ foreach с трСмя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ – window (структура, хранящая Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ пиксСлСй Π² ΠΎΠΊΠ½Π΅), x ΠΈ y (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΠΊΠ½Π°):

foreach(window, x, y; img.windows(3, 3)) 
{ 
    // ... 
} 

Π’Π½ΡƒΡ‚Ρ€ΠΈ этого Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΌΠ°Π½Π΅Ρ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС пиксСли Π² ΠΎΠΊΠ½Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡ… с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями ядра kernel:

Color4f sum = Color4f(0, 0, 0); 
foreach(ref Color4f pixel, x, y; window) 
    sum += pixel * kernel[y][x]; 

ВычисляСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ свСртки ΠΈ сохраняСм Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

outputImage[x, y] = sum / 9.0f;
Copyright Β© 2008-2026 The FPS Team and co-authors. Available under Π‘Π‘ BY-NC-SA 3.0. When copying, a link to the source is required. Russian version