- Шта су слике?
- Како рачунар чува слике
- Зашто је машини тешко да идентификује слике
- Примена и употреба ОпенЦВ-а
- Инсталирање ОпенЦВ-а са Питхон-ом и Анацондом
- Отварање и чување слика у ОпенЦВ-у
- Слика сиве скале у ОпенЦВ-у
- Простори боја
- Истраживање појединих компонената РГБ слике
- Претварање слике у појединачну РГБ компоненту
- Приказ хистограма слике
- Цртање слика и облика помоћу ОпенЦВ-а
Уметност је начин виђења, и кажу да је виђење веровање, али такође је и обрнуто, веровање виђење и заиста је тешко замислити живот на овом свету без дара вида - наше очи, како је дивно бити дете када нам се очи само отворе, ми видимо свет и почињемо да препознајемо и видимо свет око себе, али како време пролази, исто то дивно искуство постаје свакодневно. Али како напредујемо са технологијом, налазимо се на ивици да машине такође могу да је виде и разумеју. Тренутно изгледа да није научно-фантастично ако телефон откључате само лицем, али прича о развоју машинске визије датира уназад више од 20 година.
Почетни формални корак на овом пољу је предузет још 1999. године у оквиру Интелове иницијативе, када су сва истраживања која су се одвијала сарађивана у оквиру ОПЕН ЦВ (Опен Соурце рачунарске визије), оригинално написаног на Ц ++, са првим великим издањем 1.0 у 2006. години. 2009. године, трећи у 2015. и четврти управо у 2018. Сад. ОпенЦВ има Ц ++, Питхон и Јава интерфејсе и подржава Виндовс, Линук, Мац ОС, иОС и Андроид. Тако да се лако може инсталирати у Распберри Пи са Питхон и Линук окружењем. А Распберри Пи са ОпенЦВ и прикљученом камером може се користити за стварање многих апликација за обраду слика у стварном времену попут откривања лица, закључавања лица, праћења предмета, откривања регистарске плочице аутомобила, система кућне безбедности итд.
Пре него што се научите обрађивати слике помоћу опенЦВ- а, важно је знати које су то слике и како их људи и машине перципирају.
Шта су слике?
Слике су дводимензионални приказ спектра видљиве светлости. А спектар видљиве светлости је само део електромагнетног спектра који лежи тамо између инфрацрвеног и ултраљубичастог спектра.
Како настају слике: - када се светлост одбија од предмета на филму, сензору или на мрежњачи.
Тако раде наше очи, користећи преграду да блокира већину тачака светла, остављајући мали отвор кроз који светлост може да прође, назива се отвором и формира много фокусирану слику и радни је модел за камеру са рупама са пиновима али постоји проблем у камери са рупама са пин-ом, та иста количина светлости ће ући у отвор, што не може бити погодно за филм или формирану слику, такође не можемо добити фокусирану слику, како бисмо фокусирали слику коју треба филм померати напред-назад, али ово је у многим ситуацијама проблематично.
Или овај проблем можемо да решимо помоћу сочива, он нам омогућава да контролишемо величину отвора, а на фотографији познат као ф Стоп, опћенито је нижа вриједност ф Стоп боља у фотографији.
Величина отвора такође нам омогућава да уђемо у лепу дубину поља звану Бокех на фотографији, омогућава нам замућену позадину док се фокусирамо на слику.
Како рачунар чува слике
Можда сте чули за разне формате слика као што су.ПНГ,.ЈПЕГ и сл. Све ово је дигитални приказ нашег аналогног света, рачунари то раде превођењем слике у дигитални код за чување, а затим датотеку поново интерпретирају у слику за приказ. Али у основи користе заједничку платформу за чување слика, а исто важи и за опенЦВ.
ОпенЦВ подразумевано користи РГБ (црвени, зелени и плави) простор боје за своје слике, где свака координата пиксела (к, и) садржи 3 вредности у распону за интензитете у 8-битном облику, тј. (0-255, 2 8).
Мешање различитих интензитета сваке боје даје нам читав спектар, зато се у сликарству или уметности ове три боје сматрају основним бојама, а све остале секундарним, јер већину секундарних боја могу формирати примарне боје. Као и за жуту, имамо следеће вредности: Црвена - 255; Зелена - 255; Плава - 0.
Сада су слике похрањене у вишедимензионалне низове. У програмирању, низ је низ колекција објеката. И овде имамо посла са три врсте низова 1Д, 2Д и 3Д где 'Д' означава димензионалне.
Слике у боји смештене су у тродимензионалне низове, где трећа димензија представља РГБ боје (што ћемо видети касније), а заједно чине различите интензитете пиксела за слику, док су црно-беле слике смештене у дводимензионалне низове а такође постоје две врсте црно-белих слика у сивим тоновима и бинарне слике.
Слике у сивим тоновима се формирају из нијанси сиве боје дводимензионалног низа, док су бинарне слике пиксела црне или беле боје.
Зашто је машини тешко да идентификује слике
Компјутерска визија је сама по себи изазован задатак, можете и сами да замислите колико је тешко машини пружити осећај вида, препознавања и идентификације. Постоје следећи фактори који чине рачунарски вид толико тешким.
- Ограничења сензора и сочива камере
- Варијације тачке гледишта
- Промена осветљења
- Скалирање
- Оклузије
- Варијације класе предмета
- Двосмислене слике / оптичке илузије
Примена и употреба ОпенЦВ-а
Упркос потешкоћама, Цомпутер Висион има много прича о успеху
- Роботска навигација - Самовозећи аутомобили
- Препознавање и препознавање лица
- Претрага слика претраживача
- Читање регистарских таблица
- Препознавање рукописа
- Снапцхат и филтери за лице
- Препознавање предмета
- Праћење лопте и играча у спорту
- И још много тога!
Инсталирање ОпенЦВ-а са Питхон-ом и Анацондом
ОпенЦВ је написан на Ц ++, али је веома тешко имплементирати га са Ц ++ и стога смо одлучили да га имплементирамо са језиком високог нивоа као питхон, а такође постоје и додатне предности имплементације ОпенЦВ са питхон јер је Питхон један од најлакших језика за почетнике Изузетно је моћан за апликације за науку података и машинско учење, а такође чува слике у нумпи низовима што нам омогућава да врло лако радимо неке врло моћне операције.
Основно програмирање је корисно уз Изложеност средњошколској математици, веб камеру, Питхон 2.7 или 3.6 (пожељан је пакет Анацонда).
Корак 1. Преузмите и инсталирајте Анацонда Питхон пакет
Идите на: хттпс://ввв.анацонда.цом/довнлоад и одаберите према својој машини временске прозоре, Линук или Мац и можете одабрати верзију питхон 2.7 или питхон 3.7 за 64-битне или 32-битне системе, али сада дневно већина система је 64 битна.
Анацонда дистрибуција питхона долази заједно са Спидер студијем, јупитер свескама и анацонда промптом, што Питхон чини изузетно пријатним за употребу. За примере бисмо користили спидер студио.
Избор између питхон 2.7 или 3.7 је потпуно неутралан, али међутим, за примере који бисмо користили питхон 3.7, јер је то будућност питхона и који ће преузети питхон 2.7 из 2020, такође се већина библиотека развија у питхон 3.7 будући аспект питхона на уму. Такође даје очекиване резултате на основним математичким операцијама као што је (2/5 = 2.5), док би питхон 2.7 то проценио на 2. Такође, принт се третира као функција у питхон 3.7 (принт („хелло“)), тако да пружа практичне програмере.
Корак 2. Стварање виртуелне платформе са ОпенЦВ-ом
Ми ћемо инсталирати ОпенЦВ стварањем виртуелне платформе за Спидер помоћу Анаконда брз и на ИМЛ датотеци овде.
Са ИМЛ датотекама инсталираћемо све пакете и библиотеке који су вам потребни, али ако желите да инсталирате додатне пакете, лако можете да их инсталирате путем упита анацонда, покретањем команде тог пакета.
Идите на икону за претрагу прозора и пронађите терминалски терминал анацонда, можете га пронаћи у фасцикли анацонда коју сте управо инсталирали.
Затим морате пронаћи преузету ИМЛ датотеку, а одавде имате два избора или да промените директоријум вашег терминала на место где се преузима ваша ИМЛ датотека или да копирате своју ИМЛ датотеку у директоријум у којем је инсталирана ваша анацонда случајеви би се налазили унутар Ц: \ погона, након копирања ваше ИМЛ датотеке на наведено место РУНИРАТИ следећу команду на ваш упит
цонда енв цреате –ф виртуал_платформ_виндовс.имл
Будући да се мој систем изводи на прозорима, ИМЛ датотека и наредба одговарају прозорима, међутим, можете га прилагодити свом систему заменом прозора Линуком или Мац-ом.
Напомена: - Ако издвајање пакета даје грешку, прво инсталирајте питорцх и нумпи, а затим покрените горњу наредбу.
Сада пронађите навигатор анацонда и појавио би се падајући мени „Апплицатионс он ___“ и одатле изаберите виртуелно окружење, а затим одатле морате покренути Спидер студио.
И то је то, спремни сте за почетак!
Отварање и чување слика у ОпенЦВ-у
Овде објашњавамо неке основне наредбе и терминологију за употребу Питхона у ОпенЦВ-у. Научићемо о три основне функције у ОпенЦВ имреад, имсхов и имврите.
# коментари у питхону дати су симболом #
Увезите опенцв у питхон наредбом
увоз цв2
Учитајте слику користећи 'имреад', наводећи путању до слике
имаге = цв2.имреад ('инпут.јпг')
Сада се та слика учитава и чува у питхону као променљива коју смо назвали сликом
Сада да бисмо приказали нашу променљиву слике, користимо 'имсхов', а први параметар за функцију имсхов је наслов приказан на прозору слике и мора се унети у ('') да би се име представљало као низ
цв2.имсхов ('здраво свету', слика)
ваиткеи нам омогућава да унесемо информације када је прозор слике отворен, остављајући га празним, он само чека да било који тастер притисне пре него што настави, постављањем бројева (осим 0), можемо одредити кашњење колико дуго држите прозор отвореним (време за милисекунде овде).
цв2.ваитКеи ()
'киллАллВиндовс' затвара све отворене прозоре, ако ово не поставите, ваш програм ће висити.
цв2.дестроиАллВиндовс ()
, за ово ћемо користити нумпи, нумпи је библиотека за питхон програмирање за додавање подршке великим вишедимензионалним низовима и матрицама.
импорт цв2 # импортинг нумпи импорт нумпи као нп имаге = цв2.имреад ('инпут.јпг') цв2.имсхов ('хелло_ворлд', имаге) # схапе функција је веома корисна када гледамо димензије низа, она је враћа корпицу која даје димензију отиска слике (имаге.схапе) цв2.ваитКеи () цв2.дестроиАллВиндовс ()
излаз конзоле - (183, 275, 3), Две димензије слике су 183 пиксела у висину и 275 пиксела у ширину и 3 значи да постоје још три компоненте (Р, Г, Б) које чине ову слику (приказује да су слике у боји смештене у тродимензионалне низове).
принт ('Висина слике:', (имаге.схапе, 'пиксели')) принт ('Ширина слике:', (имаге.схапе, 'пиксели'))
излаз конзоле - Висина слике: (183, 'пиксели')
Ширина слике: (275, 'пиксели')
Чување уређене слике у ОпенЦВ-у
Користимо 'имврите' за одређивање назива датотеке и слике коју треба сачувати.
цв2.имврите ('оутпут.јпг', слика) цв2.имврите ('оутпут.пнг', слика)
Први аргумент је име датотеке коју желимо да сачувамо, {за читање или за спремање датотеке коју користимо ('') да бисмо је означили као низ}, а други аргумент је име датотеке.
ОпенЦВ вам омогућава да слику сачувате у различитим форматима.
Слика сиве скале у ОпенЦВ-у
Греисцалинг је поступак којим се слика претвара из пуне боје у нијансе сиве (црно-беле)
У опенцв-у, многе функције сиве скале слика пре обраде. То је учињено јер поједностављује слику, делујући готово као смањење шума и повећавајући време обраде јер је на слици мање података (јер се сиве слике чувају у дводимензионалним низима).
увоз цв2 # учитај нашу улазну слику имаге = цв2.имреад ('инпут.јпг') цв2.имсхов ('оригинал', слика) цв2.ваитКеи () # користимо цвтцолор, да претворимо у сиву скалу граи_имаге = цв2.цвтЦолор (слика, цв2.ЦОЛОР_БГР2ГРАИ) цв2.имсхов ('сиви тонови', сива_слика) цв2.ваитКеи () цв2.дестроиАЛЛВиндовс ()
Једноставнији начин за претварање слике у сиву скалу је само додавање аргумента 0 у функцији имреад по страни имену слике
увоз цв2 греи_имаге = цв2.имреад ('инпут.јпг', 0) цв2.имсхов ('сиви тонови', греи_имаге) цв2.ваитКеи () цв2.дестроиАллВиндовс ()
импорт цв2 импорт нумпи ас нп имаге = цв2.имреад ('инпут.јпг') принт (имаге.схапе) цв2.имсхов ('оригинал', имаге) цв2.ваитКеи () греи_имаге = цв2.цвтЦолор (имаге, цв2.ЦОЛОР_БГР2ГРЕИ) цв2.имсхов ('сиви тонови', сива_слика) принт (греи_имаге.схапе) цв2.ваитКеи () цв2.дестроиАЛЛВиндовс ()
Излаз конзоле: - (183, 275, 3) - за обојену слику
(183, 275) - за сиву слику
Отуда јасно показује да су слике у боји представљене тродимензионалним низовима, док су сиве слике дводимензионалним низовима.
Простори боја
Простори у боји су начин на који се слике чувају. РГБ, ХСВ, ЦМИК су различити простори боја, ово су само једноставни начини представљања боје.
РГБ - црвена, зелена и плава.
ХСВ - нијанса, засићеност и вредност.
А ЦМИК се обично користи у инкјет штампачима.
РГБ или БГР простор боја
Подразумевани простор боја ОпенЦВ-а је РГБ. РГБ је адитивни модел боја који генерише боје комбиновањем плаве, зелене и црвене боје различитих интензитета / осветљености. У ОпенЦВ-у користимо 8-битне дубине боја.
- Црвена (0-255)
- плава (0-255)
- зелена (0-255)
Међутим, ОпенЦВ заправо складишти боју у БГР формату.
Забавна чињеница: - Користимо БГР редослед у рачунарима због тога што се непотписани 32-битни цели бројеви чувају у меморији, а ипак се завршава као РГБ. Цели број који представља боју, на пример: - 0Кс00ББГГРР биће сачуван као 0КСРРГГББ.
ХСВ простор бојаХСВ (Хуе, Сатуратион & валуе / Бригхтнесс) је простор боја који покушава да представи боје које људи перципирају. Информације о боји чува у цилиндричном облику тачака РГБ боја.
Нијанса - вредност боје (0-179)
Засићење - Живахност боје (0-255)
Вредност - осветљеност или интензитет (0-255)
ХСВ формат простора боја је користан у сегментацији боја. У РГБ-у филтрирање одређене боје није лако, али ХСВ олакшава подешавање опсега боја за филтрирање одређене боје онако како их ми доживљавамо.
Нијанса представља боју у ХСВ-у, вредност нијансе се креће од 0 - 180, а не од 360, тако да не завршава пуни круг и тако је мапирана другачије од стандардне.
Филтри опсега боја
- Црвена - (165-15)
- Зелена - (45-75)
- Плава - (90-120)
Као што знамо да се слике чувају у РГБ (црвеном, зеленом и плавом) простору боја, тако нам и ОпенЦВ показује исто, али прво што треба да запамтимо код опенцв-овог РГБ формата је да је то заправо БГР и то можемо знати гледајући облик слике.
импорт цв2 импорт нумпи ас нп имаге = цв2.имреад ('инпут.јпг') # Б, Г, Р вредност за првих 0,0 пиксела Б, Г, Р = принт принт (Б, Г, Р) принт (имаге.схапе) # сада ако ово применимо на сивој скали греи_имг = цв2.цвтЦолор (имаге, цв2.ЦОЛОР_БГР2ГРАИ) принт (греи_имг.схапе) # греи_имаге вредност пиксела за штампу од 10,50 пиксела (греи_имг)
Излаз конзоле: испис (Б, Г, Р) - 6 11 10
принт (имаге.схапе) - (183, 275, 3)
принт (греи_имг.схапе) - (183, 275)
испис (греи_имг) - 69
Сада на слици сиве скале постоје само две димензије, с обзиром да се сећамо да је слика у боји похрањена у три димензије, трећа димензија је (Р, Г, Б), док су у сивим тоновима присутне само две димензије, јер (Р, Г, Б) је одсутан и за одређени положај пиксела добијамо само једну вредност док смо у обојеној слици добили три вредности.
Још један користан простор у боји је ХСВ
импорт цв2 имаге = цв2.имреад ('инпут.јпг') хсв_имаге = цв2.цвтЦолор (имаге, цв2.ЦОЛОР_БГР2ХСВ) цв2.имсхов ('ХСВ имаге', хсв_имаге) цв2.имсхов ('Хуе цханнел', хсв_имаге) цв2. имсхов ('засићени канал', хсв_имаге) цв2.имсхов ('канал вредности', хсв_имаге) цв2.ваитКеи () цв2.дестроиАллВиндовс ()
Након покретања кода можете видети четири слике од којих су три појединачна канала, а једна је комбинована ХСВ слика.
Слика на нијанси је прилично тамна, јер њена вредност варира само од 0 до 180.
Такође имајте на уму да имсхов функција покушава да вам прикаже РГБ или БГР слику, али ХСВ конверзија се преклапа.
Такође, канал вредности ће бити сличан нијансама сиве слике због своје осветљености.
Истраживање појединих компонената РГБ слике
импорт цв2 имаге = цв2.имреад ('инпут.јпг') # опенцв функција поделе дели слику на сваки индекс боја Б, Г, Р = цв2.сплит (слика) цв2.имсхов ("Црвена", Р) цв2.имсхов ("Греен", Г) цв2.имсхов ("Блуе", Б) #макинг оригиналну слику спајањем појединачних компонената боје спојила = цв2.мерге () цв2.имсхов ("припојена" стопљене) #амплифиинг плаве боје спојила = цв2.мерге () цв2.имсхов („спојено са плавим појачавањем“, спојено) # представља облик појединачних компонената боје. # излаз би требао бити само две димензије које би биле висина и ширина, јер је трећи елемент РГБ компоненте појединачно представљен принт (Б.схапе) принт (Р.облик) отисак (Г.облик) цв2.ваитКеи (0) цв2.дестроиАллВиндовс ()
Излаз конзоле: # димензије слике из функције облика
(183, 275)
(183, 275)
(183, 275)
Претварање слике у појединачну РГБ компоненту
У доњем коду креирали смо матрицу нула са димензијама слике ХкВ, нула враћа низ испуњен нулама, али са истим димензијама.
Функција облика је веома корисна када гледамо димензију слике, а овде смо урадили резање те функције облика. Дакле, облик би хватао све до одређених тачака, тј. До секунде назначених тачака које би биле висина и ширина слике, јер трећа представља РГБ компоненту слике и овде нам није потребна.
импорт цв2 импорт нумпи ас нп имаге = цв2.имреад ('инпут.јпг') Б, Г, Р = цв2.сплит (имаге) нула = нп.зерос (имаге.схапе, дтипе = "уинт8") цв2.имсхов („ЦРВЕНА“, цв2.мерге ()) цв2.имсхов („Зелена“, цв2.мерге ()) цв2.имсхов („Плава“, цв2.мерге ()) цв2.ваитКеи (0) цв2.дестроиАллВиндовс ()
Приказ хистограма слике
Приказ хистограма слике је метода визуелизације компонената слика.
Следећи код вам омогућава да анализирате слику кроз хистограм боја његових комбинованих и појединачних компоненти боје.
импорт цв2 импорт нумпи као нп # морамо увести матплотлиб да бисмо креирали графиконе хистограма импорт матплотлиб.пиплот као плт имаге = цв2.имреад ('инпут.јпг') хистограм = цв2.цалцХист (,, Ноне,,) # уцртавамо хистограм, равел () преусмерава наш низ слика плт.хист (имаге.равел (), 256,) плт.схов () # преглед засебних канала у боји цолор = ('б', 'г', 'р') # знамо одвојите боју и исцртајте сваку у хистограму за и, кол у набрајању (боја): хистограм2 = цв2.цалцХист (,, Ниједан,,) плт.плот (хистограм2, цолор = цол) плт.клим () плт.схов ()
Хајде да разумемо функцију цалцХист са сваким њеним појединачним параметрима
цв2.цалцХист (слике, канали, маска, хистсизе , опсези)
Слике: изворна слика типа уинт 8 или флоат 32. Требало би је дати у угластим заградама, тј. „“, Што такође указује на њен низ другог нивоа, јер је слика за опенцв податак у облику низа.
Канали: такође је дат у угластим заградама. То је индекс канала за који калкулишемо хистограм, на пример, ако је улаз слика у сивим тоновима, његова вредност је, за слике у боји које можете проследити, или за израчунавање хистограма плавог, зеленог и црвеног канала.
Маска: слика маске. да би се пронашао хистограм пуне слике, даје се као „ниједан“. али ако желите да пронађете хистограм одређеног дела слике, морате за то створити слику маске и дати је као маску.
Хистизе: Ово представља наше БИН бројање. Потребно је дати у угластим заградама за пуну скалу коју пролазимо.
Домет : Ово је наш опсег, обично је
Цртање слика и облика помоћу ОпенЦВ-а
Испод је неколико примера за цртање линија, правоугаоника, многоугла, круга итд. У ОпенЦВ-у.
импорт цв2 импорт нумпи као нп # креирање црне квадратне слике = нп.зерос ((512,512,3), нп.уинт8) # можемо и ово да направимо црно-бело, међутим не би било промена имаге_бв = нп.зерос ((512,512), нп.уинт8) цв2.имсхов ("црни правоугаоник (боја)", слика) цв2.имсхов ("црни правоугаоник (црно-бијела)", имаге_бв)
Линија
#ствари линију преко црног квадрата # цв2.лине (слика, почетне координате, крајње координате, боја, дебљина) # цртање дијагоналне линије дебљине 5 пиксела имаге = нп.зерос ((512,512,3), нп.уинт8) цв2.лине (слика, (0,0), (511,511), (255,127,0), 5) цв2.имсхов ("плава линија", слика)
Правоугаоник
#ствари правоугаоник преко црног квадрата # цв2.рецтангле (слика, почетне координате, завршне координате, боја, дебљина) # цртање правоугаоника дебљине 5 пиксела имаге = нп.зерос ((512,512,3), нп.уинт8) цв2.рецтангле (слика, (30,50), (100,150), (255,127,0), 5) цв2.имсхов ("правоугаоник", слика)
#креирање круга преко црног квадрата # цв2.цирцле (слика, центар, полупречник, боја, испуна) имаге = нп.зерос ((512,512,3), нп.уинт8) цв2.цирцле (слика, (100,100), (50), (255.127,0), - 1) цв2.имсхов ("круг", слика)
#креирање слике полигона = нп.зерос ((512,512,3), нп.уинт8) # летс дефинише четири тачке птс = нп.арраи (,,,], нп.инт32) # летс сада преобликују наше тачке у облику који захтева полилинија птс = птс.ресхапе ((- 1,1,2)) цв2.полилинес (слика,, Тачно, (0,255,255), 3) цв2.имсхов ("полигон", слика)
# уношење текста помоћу опенцв # цв2.путТект (слика, 'текст за приказ', почетна лева почетна тачка, фонт, величина фонта, боја, дебљина) имаге = нп.зерос ((512,512,3), нп.уинт8) цв2. путТект (слика, „здраво, свет“, (75,290), цв2.ФОНТ_ХЕРСХЕИ_ЦОМПЛЕКС, 2, (100,170,0), 3) цв2.имсхов („здраво, свет“, слика) цв2.ваитКеи (0) цв2.дестроиАллВиндовс ()
Цомпутер Висион и ОпенЦВ су веома велике теме које треба покрити, али овај водич би био добра полазна основа за учење ОпенЦВ-а и обраде слика.