ОпенЦВ Питхон библиотека је омогућила аутоматизацију процеса спајања више слика у једну панорамску слику.

Панорамска фотографија је техника снимања ширег видног поља које једна фотографија не може постићи. Ова техника спаја више слика како би се створила једна слика која хвата целу сцену на импресиван начин.

Уз помоћ Питхон-а, можете аутоматизовати овај процес и са лакоћом креирати прелепе панораме.

Подешавање вашег Питхон окружења

Да бисте то урадили, требало би да имате а основно разумевање Пајтона. Покрените било који Питхон ИДЕ и створити ново виртуелно окружење. Направите нову Питхон датотеку. И на терминалу покрените следећу команду да бисте инсталирали ОпенЦВ.


пип инсталл опенцв-цонтриб-питхон

Користићете опенцв-цонтриб-питхон библиотека за учитавање слика и манипулацију њима. Има цв2.Ститцхер класе коју ћете користити за креирање панорама.

Комплетан изворни код и узорци слика коришћених у овом чланку доступни су у овом чланку ГитХуб спремиште.

Увоз потребних библиотека

Увезите цв2 и ос модуле у вашу скрипту. Користићете ОС за навигацију кроз системске путање.

увоз цв2
увоз ос

Тхе ОС модул је уграђени модул Питхон-а. То је разлог зашто не морате да га инсталирате споља.

Учитавање слика

Направите функцију за учитавање слика које желите да спојите. Прво направите празну листу која ће чувати почетне слике. Затим прођите кроз сваку датотеку у путањи фасцикле и проверите да ли је датотека слика. Ако је слика, учитајте је и додајте је на листу слика.


дефлоад_имагес(путања_фолдера):
# Учитајте слике из фасцикле и промените им величину.
слике = []
за назив документа ин ос.листдир (фолдер_патх):
# Проверите да ли је датотека слика
ако филенаме.ендсвитх('.јпг') или филенаме.ендсвитх('.пнг'):
# Учитајте слику користећи ОпенЦВ и промените јој величину
имаге = цв2.имреад (ос.патх.јоин (путања_фолдера, име датотеке))
имагес.аппенд (слика)
повратак слике

Можете додати више формата сликовних датотека да бисте диверзификовали свој програм. Овај код ће само тражити .јпг и .пнг формати датотека.

Промена величине слика за уједначен бод и бржу обраду

Направите функцију која ће променити величину листе слика. Функција ће проћи кроз сваку слику на листи и променити јој величину. На крају, додајте слике промењене величине на нову листу.


дефресизе_имагес(слике, ширина, висина):
ресизе_имагес = []
за слика ин слике:
ресизед_имаге = цв2.ресизе (слика, (ширина, висина))
ресизед_имагес.аппенд (ресизед_имаге)
повратак ресизед_имагес

Промена величине осигурава да шавови слика буду уједначени. Такође смањује величину датотеке ради брже обраде.

Коришћење модула за спајање ОпенЦВ-а за спајање слика

Направите функцију за спајање слика промењене величине. Ова техника је опште позната као стварање панораме. Функција ће узети листу слика као улаз. Користити Ститцхер модул за њихово спајање. Коначно, функција ће вратити спојену слику и статусни код.


дефститцх_имагес(слике):
ститцхер = цв2.Ститцхер.цреате()
(статус, ститцхед_имаге) = ститцхер.ститцх (слике)
ако статус == цв2.СТИТЦХЕР_ОК:
повратак ститцхед_имаге
друго:
повратакНиједан

Ако је шивање било успешно (као што је назначено на цв2.СТИТЦХЕР_ОК статусни код), функција ће вратити спојену слику. У супротном, вратиће се Ниједан.

Изрезивање спојене слике

Направите функцију која ће узети спојену слику и вратити је након што је исечете. Прво, претворите спојену слику у нијансе сиве. Затим примените бинарни праг да бисте креирали бинарну слику. На крају, пронађите највећу контуру у бинарној слици и израчунајте њен гранични правоугаоник.


дефцроп_имаге(слика):
сива = цв2.цвтЦолор (слика, цв2.ЦОЛОР_БГР2ГРЕИ)
тхресх = цв2.тхресхолд (сива, 0, 255, цв2.ТХРЕСХ_БИНАРИ)[1]
контуре = цв2.финдЦонтоурс (тхресх, цв2.РЕТР_ЕКСТЕРНАЛ, цв2.ЦХАИН_АППРОКС_СИМПЛЕ)[0]
к, и, в, х = цв2.боундингРецт (контуре[0])
изрезана_слика = слика[и: и + х, к: к + в]
повратак цроппед_имаге

Спојена слика се исече помоћу граничног правоугаоника.

Преглед и чување спојене слике помоћу ОпенЦВ-а

Направите функцију која ће приказати спојену слику у интерактивном прозору и сачувати је на диску.


дефпревиев_анд_саве_имаге(слика, путања_фасцикле, име_фасцикле):
# Прикажите спојену слику
цв2.намедВиндов('Ушивена слика', цв2.ВИНДОВ_НОРМАЛ)
цв2.имсхов('Ушивена слика', слика)
цв2.ваитКеи(0)

# Сачувајте спојену слику
оутпут_филенаме = ос.патх.јоин (путања_фасцикле, име_фасцикле + '_панорама.јпг')
цв2.имврите (име излазне_датотеке, слика)
штампа ('Ушивена слика је сачувана за фолдер:', име фасцикле)

Панорама слика се чува у истој фасцикли која садржи оригиналне слике.

Контролисање тока вашег програма

Направите функцију која ће контролисати ток вашег програма. Учитаће све слике из наведеног фолдера. Промените величину и спојите их. Изрежите спојену слику, прикажите њен преглед, а затим је сачувајте на диск. Ако у фасцикли има мање од две слике, функција ће одштампати поруку о грешци и вратити се без спајања или чувања.


дефститцх_фолдер(путања_фолдера, ширина=800, висина=800):
# Спојите све слике у фасциклу и сачувајте резултат.
# Учитајте слике из фасцикле
слике = лоад_имагес (фолдер_патх)

# Проверите да ли постоје најмање две слике у фасцикли
ако лен (слике) < 2:
штампа („Нема довољно слика у фолдеру:“, фолдер_патх)
повратак

# Промените величину слика
ресизед_имагес = ресизе_имагес (слике, ширина, висина)

# Спојите слике
ститцхед_имаге = ститцх_имагес (промењена величина слике)
ако ститцхед_имаге јеНиједан:
штампа („Спајање за фасциклу није успело:“, фолдер_патх)
повратак

# Изрежите спојену слику
изрезана_слика = исечена_слика (прошивена_слика)

# Прегледајте и сачувајте спојену слику
име_фасцикле = ос.путања.басенаме (путања_фасцикле)
превиев_анд_саве_имаге (изрезана_имаге, фолдер_патх, фолдер_наме)

Прођите путању фасцикле која садржи слике које желите да спојите.

ститцх_фолдер('сампле_имагес') 

Слике које користите треба да садрже функције које се преклапају. Ове карактеристике могу бити било шта, од истакнутих оријентира до текстурних узорака на слици. ОпенЦВ их користи као референтну тачку за поравнавање слика.

Без ових функција, ОпенЦВ-у ће бити тешко да поравна слике и створи беспрекорну панораму.

Тестирање вашег програма

Прикупите слике које желите да трансформишете у панорамску слику. Уверите се да имају карактеристике које се преклапају.

Погледајте брдо на овој првој слици.

На овој другој слици, брдо је мало видљиво. Ово ствара функцију преклапања.

Сачувајте слике у фасциклу. Проследите путању фасцикле на ститцх_фолдер функција за шивање. А затим покрените програм.

Програм је спојио слике и направио панорамску слику са ширим погледом на сцену. Имајте на уму да је за креирање горње панорамске слике коришћено девет слика које су присутне у горе поменутом ГитХуб репозиторијуму.

Манипулација сликама помоћу ОпенЦВ-а

Прављење панорама демонстрира неке од многих техника манипулације сликама које ОпенЦВ нуди. Постоји више техника које можете користити за манипулисање сликама које одговарају вашим потребама. Рад на више пројеката који укључују манипулацију сликама помоћи ће вам да побољшате своје вештине компјутерског вида уопште.