# Претворите слику у нијансе сиве
сива = цв2.цвтЦолор (слика, цв2.ЦОЛОР_БГР2ГРЕИ)
# Преузмите Аруцо речник на основу величине маркера и укупног броја маркера
дицтионари_кеи = гетаттр (цв2.аруцо, ф'ДИЦТ_{маркерСизе}ИКС'
ф'{маркерСизе}_{тоталМаркерс}')
аруцо_дицтионари = цв2.аруцо.гетПредефинедДицтионари (дицтионари_кеи)
# Подесите параметре Аруцо детектора
аруцо_парамс = цв2.аруцо. ДетецторПараметерс()
# Откријте Аруцо маркере на слици у нијансама сиве
маркер_цорнерс, маркер_идс, _ = цв2.аруцо.детецтМаркерс (сива, аруцо_дицтионари,
параметри=аруцо_парамс)
видео_видтх, видео_хеигхт):
фраме_хеигхт, фраме_видтх = видео_фраме.схапе[:2]
ако лен (аруцо_маркерс[0]) != 0:
за и, угао_маркера ин набрајати (аруцо_маркерс[0]):
маркер_цорнерс = маркер_цорнер.ресхапе((4, 2)).астипе (нп.инт32)
# Нацртајте полигон око углова маркера
цв2.полилинес (видео_фраме, [маркер_цорнерс], Истина, (0, 255, 0), 2)
# Додајте ИД маркера као текст у горњем левом углу маркера
цв2.путТект (видео_фраме, стр (аруцо_маркерс[1][и]),
тупле (маркер_цорнерс[0]),
цв2.ФОНТ_ХЕРСХЕИ_СИМПЛЕКС,0.5, (0, 255, 0), 2)
# Пронађите хомографску матрицу да бисте мапирали слику преклапања на маркер
хомограпхи_матрик, _ = цв2.финдХомограпхи(
нп.арраи([[0, 0], [видео_видтх, 0], [видео_видтх, видео_хеигхт],
[0, видео_хеигхт]], дтипе="флоат32"), углови_маркера)
# Искривите слику преклапања да би се поравнала са маркером користећи хомографску матрицу
варпед_имаге = цв2.варпПерспецтиве (преклапање_имаге, хомограпхи_матрик,
(ширина_оквира, висина_оквира))
# Направите маску да примените искривљену слику само на област маркера
маска = нп.зерос((висина_оквира, ширина_оквира), дтипе="уинт8")
цв2.филлЦонвекПоли (маска, маркер_цорнерс, (255, 255, 255), цв2.ЛИНЕ_АА)
маскед_варпед_имаге = цв2.битвисе_анд (варпед_имаге, варпед_имаге,
маска=маска)
# Нанесите инверзну маску на видео оквир
маскед_видео_фраме = цв2.битвисе_анд (видео_фраме, видео_фраме,
маск=цв2.битвисе_нот (маска))
# Комбинујте маскирану искривљену слику и маскирани видео оквир
видео_фраме = цв2.адд (маскед_варпед_имаге, маскед_видео_фраме)
# Подесите димензије видео фида
видео_хеигхт = 480
видео_видтх = 640
# Отворите снимање видео записа
видео_цаптуре = цв2.ВидеоЦаптуре(0)
# Учитајте и промените величину преклапања слике
оверлаи_имаге = цв2.ресизе (оверлаи_имаге, (видео_видтх, видео_хеигхт))
док видео_цаптуре.исОпенед():
# Прочитајте оквир из видео записа
рет, видео_фраме = видео_цаптуре.реад()
ако рет:
# Пронађите Аруцо маркере у видео оквиру
аруцо_маркерс = финдАруцоМаркерс (видео_фраме, тоталМаркерс=100)
# Преклапање слике на маркере у видео оквиру
видео_фраме = суперимпосеИмагеОнМаркерс (видео_фраме, аруцо_маркерс,
оверлаи_имаге, видео_видтх,
видео_висина)
# Прикажите видео оквир са преклапањем
цв2.имсхов(„Фид камере“, видео_фраме)
# Проверите да ли је притиснут тастер 'к' да изађете из петље
ако цв2.ваитКеи(1) & 0кФФ == орд('к'):
пауза