- Ano ang Mga Imahe?
- Paano nag-iimbak ng computer ang mga imahe
- Bakit mahirap makilala ng isang makina ang mga imahe
- Application at paggamit ng OpenCV
- Pag-install ng OpenCV gamit ang Python at Anaconda
- Pagbubukas at pag-save ng mga imahe sa OpenCV
- Gray na Pag-scale ng Larawan sa OpenCV
- Mga Puwang ng Kulay
- Paggalugad sa mga indibidwal na bahagi ng imahe ng RGB
- Pag-convert ng imahe sa indibidwal na sangkap ng RGB
- Representasyon ng Larawan ng Histogram
- Pagguhit ng Mga Imahe at Hugis gamit ang OpenCV
Ang Art ay isang paraan ng pagkakita, at sinabi nila na ang nakikita ay naniniwala, ngunit ang kabaligtaran ay totoo din, ang paniniwala ay nakikita at talagang mahirap isipin ang pamumuhay sa mundong ito nang walang kaloob na pangitain - ang aming mga mata, napakaganda ng pagiging isang sanggol kapag ang aming mga mata ay bukas lamang nakikita namin ang mundo at nagsimulang makilala at makita ang mundo sa paligid natin ngunit sa pagdaan ng oras, ang parehong kamangha-manghang karanasan ay naging isang pangkaraniwan. Ngunit habang sumusulong kami sa teknolohiya nasa isang verge kami kung saan makikita at maunawaan ito ng mga machine. Sa kasalukuyan, tila hindi ito isang sci-fi kung i-unlock mo lamang ang iyong telepono gamit ang iyong mukha, ngunit ang kuwento ng pag-unlad ng paningin sa makina ay napetsahan nang matagal nang higit sa 20 taon.
Ang paunang pormal na hakbang sa larangang ito ay naibalik noong 1999 sa isang pagkukusa ng Intel, nang ang lahat ng pagsasaliksik na nangyayari ay nagtulungan sa ilalim ng OPEN CV (Open Source computer vision), na orihinal na nakasulat sa C ++, kasama ang kauna-unahang pangunahing paglabas ng 1.0 noong 2006 pangalawa noong 2009, pangatlo sa 2015 at pang-apat ngayon lamang sa 2018. Ngayon OpenCV ay mayroong C ++, Python at Java interface at sinusuportahan ang Windows, Linux, Mac OS, iOS at Android. Kaya madali itong mai-install sa Raspberry Pi na may kapaligiran sa Python at Linux. At ang Raspberry Pi na may OpenCV at naka-attach na camera ay maaaring magamit upang lumikha ng maraming mga application ng pagproseso ng imahe ng real time tulad ng Pagtuklas ng mukha, lock ng mukha, pagsubaybay sa object, pagtuklas ng plate ng numero ng kotse, system ng seguridad ng tahanan atbp.
Bago matutunan ang pagproseso ng imahe gamit ang openCV mahalagang malaman kung ano ang mga imahe at kung paano nakikita ng mga tao at machine ang mga imaheng iyon.
Ano ang Mga Imahe?
Ang mga imahe ay isang dalawang-dimensional na representasyon ng nakikitang light spectrum. At ang nakikitang light spectrum ay bahagi lamang ng electromagnetic spectrum na nakahiga doon sa pagitan ng infrared at ultraviolet spectrum.
Paano nabuo ang mga imahe: - kapag ang isang ilaw ay sumasalamin sa isang bagay papunta sa isang pelikula, isang sensor o sa retina.
Ito ay kung paano gumana ang aming mga mata, gamit ang isang hadlang upang harangan ang pinaka punto ng mga ilaw na nag-iiwan ng isang maliit na pambungad na kung saan ang ilaw ay maaaring dumaan ito ay tinatawag na aperture, at bumubuo ito ng isang nakatuon na imahe at isang gumaganang modelo para sa isang pin hole hole, ngunit may isang problema sa isang pin hole camera, ang parehong dami ng ilaw ay papasok sa siwang, na kung saan ay hindi angkop para sa pelikula o imaheng nabuo hindi rin kami makakakuha ng isang nakatuon na imahe, upang maituon ang imahen na namin kailangang ilipat ang pelikula pabalik-balik, ngunit ito ay may problema sa maraming mga sitwasyon.
O maaari nating ayusin ang problemang ito sa pamamagitan ng paggamit ng mga lente, pinapayagan kaming kontrolin ang laki ng siwang, at sa potograpiyang kilala ito bilang f Stop, sa pangkalahatan ay babaan ang halaga ng f Stop ay mas mahusay sa pagkuha ng litrato.
Pinapayagan din kami ng laki ng aperture na mapunta sa magandang lalim ng patlang na tinawag bilang Bokeh sa pagkuha ng litrato, pinapayagan kaming magkaroon ng isang malabo na background habang nakatuon kami sa imahe.
Paano nag-iimbak ng computer ang mga imahe
Maaaring narinig mo ang iba't ibang mga format ng imahe tulad ng.png,.jpgG at iba pa lahat ng ito ay digital na representasyon ng aming analog na mundo, ginagawa ito ng mga computer sa pamamagitan ng pagsasalin ng imahe sa digital code para sa pag-iimbak at pagkatapos ay bigyang kahulugan ang file pabalik sa isang imahe para sa ipakita Ngunit sa mga pangunahing kaalaman gumagamit sila ng isang karaniwang platform para sa pagtatago ng mga imahe, at pareho ang totoo para sa openCV.
Gumagamit ang OpenCV ng puwang ng kulay ng RGB (pula, berde at asul) bilang default para sa mga imahe nito, kung saan ang bawat pixel coordinate (x, y) ay naglalaman ng 3 mga halagang umaabot para sa mga intensidad sa 8-bit form ie (0-255, 2 8).
Ang paghahalo ng iba't ibang mga intensidad ng bawat kulay ay nagbibigay sa amin ng buong spectrum, kaya't sa pagpipinta o sining ang tatlong mga kulay na ito ay itinuturing na pangunahing mga kulay at lahat ng iba pa bilang pangalawa, dahil ang karamihan sa mga pangalawang kulay ay maaaring mabuo ng pangunahing mga kulay. Tulad ng para sa dilaw, mayroon kaming mga sumusunod na halaga: Pula - 255; Green - 255; Asul - 0.
Ngayon ang mga imahe ay nakaimbak sa multi-dimensional arrays. Sa programa, ang array ay isang serye ng koleksyon ng mga bagay. At dito nakikipag-usap kami sa tatlong uri ng mga arrays na 1D, 2D at 3D kung saan ang 'D' ay nangangahulugang dimensional.
Ang mga may kulay na imahe ay nakaimbak sa tatlong mga dimensional na array, kung saan ang pangatlong sukat ay kumakatawan sa mga kulay ng RGB (na makikita natin sa paglaon), at magkakasama silang bumubuo ng iba't ibang mga intensidad ng mga pixel para sa isang imahe, habang ang mga itim at puting imahe ay nakaimbak sa dalawang dimensional na mga array at mayroon ding dalawang uri ng mga itim at puting imaheng Greyscale at binary na mga imahe.
Ang mga greyscale na imahe ay form mula sa mga shade ng grey ng isang dalawang dimensional na array, habang ang mga binary na imahe ay mga pixel alinman sa itim o puti.
Bakit mahirap makilala ng isang makina ang mga imahe
Ang paningin sa computer ay isang hamon na gawain sa sarili nito, maaari mong isipin ang iyong sarili kung gaano kahirap magbigay ng isang paningin, pagkilala at pagkilala sa isang makina. Ang mga sumusunod na kadahilanan ay nariyan na nagpapahirap sa paningin ng computer.
- Mga limitasyon ng sensor ng camera at lens
- Tingnan ang mga pagkakaiba-iba ng point
- Ang pagpapalit ng ilaw
- Pag-scale
- Mga pagkakataon
- Mga pagkakaiba-iba ng klase ng object
- Hindi siguradong Mga Imahe / Mga Ilusyon na Optical
Application at paggamit ng OpenCV
Sa kabila ng kahirapan, ang Computer Vision ay may maraming mga kwento sa tagumpay
- Robotic Navigation - Mga Kotse sa Pagmamaneho ng Sarili
- Pagtuklas sa Mukha at Pagkilala
- Search Engine Image Search
- Pagbasa ng Plato ng Lisensya
- Pagkilala sa sulat-kamay
- Mga Filter ng Snapchat at Mukha
- Pagkilala sa Bagay
- Pagsubaybay sa Bola at Player sa Palakasan
- At marami pang iba!
Pag-install ng OpenCV gamit ang Python at Anaconda
Ang OpenCV ay nakasulat sa C ++, ngunit napakahirap ipatupad ito sa C ++ at samakatuwid pinipili naming ipatupad ito sa isang mataas na antas na wika bilang sawa, at mayroon ding mga karagdagang pakinabang ng pagpapatupad ng OpenCV sa python dahil ang Python ay isa sa pinakamadaling wika para sa mga nagsisimula din Ito ay lubos na makapangyarihan para sa aplikasyon ng agham ng data at pag-aaral ng makina at nag-iimbak din ito ng mga imahe sa mga numpy array na nagbibigay-daan sa amin na gumawa ng napakalakas na pagpapatakbo nang medyo madali.
Ang pangunahing programa ay kapaki-pakinabang sa Exposure to High School Level Math, isang webcam, Python 2.7 o 3.6 (Mas gusto ang Anaconda Package).
Hakbang 1. I-download at I-install ang Anaconda Python Package
Pumunta sa: https://www.anaconda.com/download at pumili alinsunod sa panahon ng iyong machine sa mga bintana, Linux o mac at maaari kang pumili para sa bersyon ng python 2.7 o python 3.7 para sa alinman sa 64 Bit system o 32 Bit system, ngunit ngayon isang araw ang karamihan sa system ay 64 bit.
Ang pamamahagi ng Anaconda ng sawa ay kasama ng Spyder studio, mga notebook ng jupyter at anaconda prompt, na ginagawang napaka-friendly ng python. Gumagamit kami ng spyder studio para sa paggawa ng mga halimbawa.
Ang pagpipilian sa pagitan ng python 2.7 o 3.7 ay ganap na walang kinikilingan, ngunit gayunpaman para sa mga halimbawang gagamitin namin ang python 3.7 dahil ito ang hinaharap ng python at kukuha ng python 2.7 form 2020, din ang karamihan sa mga aklatan ay binuo sa pagsunod sa python 3.7 ang hinaharap na aspeto ng sawa sa isipan. Nagbibigay din ito ng mga inaasahang resulta sa pangunahing pagpapatakbo ng matematika tulad ng (2/5 = 2.5), habang susuriin ito ng python 2.7 hanggang 2. Gayundin ang pag-print ay ginagamot bilang isang pagpapaandar sa sawa 3.7 (i-print ("hello")), kaya nagbibigay ito ng hands-on sa mga programmer.
Hakbang 2. Lumilikha ng isang virtual platform na may OpenCV
Mag- i - install kami ng OpenCV sa pamamagitan ng paglikha ng isang virtual platform para sa spyder sa pamamagitan ng paggamit ng Anaconda prompt at ang YML file na na-upload dito.
Sa mga YML file mai-install namin ang lahat ng mga pakete at aklatan na kinakailangan, ngunit gayunpaman kung nais mong mag-install ng anumang karagdagang mga pakete madali mong mai-install sa pamamagitan ng anaconda prompt, sa pamamagitan ng pagpapatakbo ng utos ng package na iyon.
Pumunta sa iyong icon ng paghahanap ng windows at hanapin ang terminal ng prompt ng anaconda, mahahanap mo ito sa loob ng iyong anaconda folder na na-install mo lang.
Pagkatapos ay kailangan mong hanapin ang iyong na-download na YML file, at mula dito mayroon kang dalawang mga pagpipilian alinman sa pagbabago ng direktoryo ng iyong terminal sa lokasyon kung saan nai-download ang iyong YML file o kopyahin ang iyong YML file sa direktoryo kung saan ang iyong anaconda ay nai-install sa karamihan kaso ito ay nasa loob ng C: \ drive, pagkatapos makopya ang iyong YML file sa tinukoy na lokasyon TAKBAN ang sumusunod na utos sa iyong prompt
conda env lumikha –f virtual_platform_windows.yml
Dahil ang aking system ay tumatakbo sa windows ang YML file at ang utos ay tumutugma sa windows, subalit maaari mong baguhin ayon sa iyong system sa pamamagitan ng pagpapalit ng windows sa pamamagitan ng linux o mac bilang kani-kanilang.
Tandaan: - Kung ang pagkuha ng package ay nagbibigay ng error gawin bang i-install ang pytorch at numpy muna at pagkatapos ay patakbuhin ang utos sa itaas.
Hanapin ngayon ang anaconda navigator at magkakaroon ng drop down na menu ng "Mga Aplikasyon sa ___" at mula doon pumili ng virtual na kapaligiran at pagkatapos mula doon kailangan mong ilunsad ang Spyder studio.
At iyon lang, handa ka nang magsimula!
Pagbubukas at pag-save ng mga imahe sa OpenCV
Narito ipinapaliwanag namin ang ilang pangunahing mga utos at terminolohiya upang magamit ang Python sa OpenCV. Malalaman natin ang tungkol sa tatlong pangunahing mga pag-andar sa OpenCV imread, imshow at imwrite.
Ang # mga komentaryo sa sawa ay ibinibigay ng # na simbolo
I-import ang opencv sa sawa sa pamamagitan ng utos
import cv2
Mag-load ng isang imahe gamit ang 'imread' na tumutukoy sa path sa imahe
imahe = cv2.imread ('input.jpg')
Ngayon ang imaheng iyon ay na-load at nakaimbak sa sawa bilang isang variable na pinangalanan namin bilang imahe
Ngayon upang maipakita ang aming variable ng imahe, gumagamit kami ng 'imshow' at ang unang parameter para sa imshow function ay ang pamagat na ipinapakita sa window ng imahe, at kailangang ipasok sa (") upang kumatawan sa pangalan bilang isang string
cv2.imshow ('hello world', imahe)
Pinapayagan kami ng waitkey na maglagay ng impormasyon kapag ang window ng imahe ay bukas, sa pamamagitan ng pag-iwan sa blangko, naghihintay lamang ito para ma-press ang anykey bago magpatuloy, sa pamamagitan ng paglalagay ng mga numero (maliban sa 0), maaari naming tukuyin ang isang pagkaantala kung gaano mo katagal ang pagbubukas ng window (oras sa milliseconds dito).
cv2.waitKey ()
Isinasara ng 'sirainAllWindows' ang lahat ng mga bukas na bintana, ang kabiguang mailagay ito ay magiging sanhi ng pag-hang ng iyong programa.
cv2.destroyAllWindows ()
, para dito gagamitin namin ang numpy, ang numpy ay isang silid -aklatan para sa python program para sa pagdaragdag ng suporta sa malalaking multidimensional arrays at matrices.
import cv2 #importing numpy import numpy as np image = cv2.imread ('input.jpg') cv2.imshow ('hello_world', image) #shape function ay napaka kapaki-pakinabang kapag tinitingnan namin ang isang sukat ng isang array, ito nagbabalik ng isang tuple na nagbibigay ng isang sukat ng isang imahe na naka- print (image.shape) cv2.waitKey () cv2.destroyAllWindows ()
output ng console - (183, 275, 3), Ang dalawang sukat ng imahe ay 183 pixel ang taas at 275 pixel ang lapad at 3 ay nangangahulugang mayroong tatlong iba pang mga bahagi (R, G, B) na gumagawa ng imaheng ito (ipinapakita nito na ang mga may kulay na imahe ay nakaimbak sa tatlong dimensional na mga array).
i-print ('Taas ng imahe:', (image.shape, 'pixel')) print ('Lapad ng imahe:', (image.shape, 'pixel'))
output ng console - Taas ng imahe: (183, 'pixel')
Lapad ng imahe: (275, 'mga pixel')
Sine-save ang na-edit na imahe sa OpenCV
Gumagamit kami ng 'imwrite' para sa pagtukoy ng filename at ng imaheng mai-save.
cv2.imwrite ('output.jpg', imahe) cv2.imwrite ('output.png', imahe)
Ang unang argument ay pangalan ng file na nais naming i-save, {upang mabasa o i-save ang file na ginagamit namin (") upang ipahiwatig ito bilang isang string} at pangalawang argument ang pangalan ng file.
Pinapayagan ka ng OpenCV na i-save ang imahe sa iba't ibang mga format.
Gray na Pag-scale ng Larawan sa OpenCV
Ang Greyscaling ay ang proseso kung saan ang isang imahe ay na-convert mula sa isang buong kulay sa mga shade ng grey (itim at puti)
Sa opencv, maraming mga function na greyscales ang mga imahe bago iproseso. Ginagawa ito sapagkat pinapasimple nito ang imahe, kumikilos halos bilang isang pagbabawas ng ingay at pagdaragdag ng oras ng pagproseso dahil may mas kaunting impormasyon sa imahe (tulad ng mga greyscale na imahe na nakaimbak sa dalawang dimensional na array).
import cv2 # load our input image image = cv2.imread ('input.jpg') cv2.imshow ('original', image) cv2.waitKey () #we use cvtcolor, to convert to greyscale greycim grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale', grey_image) cv2.waitKey () cv2.destroyALLWindows ()
Ang mas simpleng paraan upang mai - convert ang imahe sa grayscale ay idaragdag lamang ang argumento 0 sa imread function bukod sa pangalan ng imahe
import cv2 grey_image = cv2.imread ('input.jpg', 0) cv2.imshow ('grayscale', grey_image) cv2.waitKey () cv2.destroyAllWindows ()
import cv2 import numpy as np image = cv2.imread ('input.jpg') print (image.shape) cv2.imshow ('original', image) cv2.waitKey () grey_image = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale', grey_image) print (grey_image.shape) cv2.waitKey () cv2.destroyALLWindows ()
Output ng console: - (183, 275, 3) - para sa may kulay na imahe
(183, 275) - para sa grayscale na imahe
Samakatuwid malinaw na ipinapakita na ang mga may kulay na imahe ay kinakatawan ng tatlong dimensional na mga array, habang ang kulay-abo na mga imahe ng sukat ng dalawang dimensional na mga array.
Mga Puwang ng Kulay
Ang mga puwang ng kulay ang paraan ng pag-iimbak ng mga imahe. Ang RGB, HSV, CMYK ay ang magkakaibang mga puwang ng kulay, ito ay simpleng mga paraan lamang upang kumatawan sa kulay.
RGB - Pula, berde at Asul.
HSV - Hue, saturation at Halaga.
At ang CMYK ay karaniwang ginagamit sa mga inkjet printer.
Puwang ng kulay ng RGB o BGR
Ang default na puwang ng kulay ng OpenCV ay RGB. Ang RGB ay isang additive na modelo ng kulay na bumubuo ng mga kulay sa pamamagitan ng pagsasama ng asul, berde at pulang mga kulay ng iba't ibang mga intensidad / ningning. Sa OpenCV ginagamit namin ang 8 bit na lalim ng kulay.
- Pula (0-255)
- Asul (0-255)
- Green (0-255)
Gayunpaman ang OpenCV ay talagang nag-iimbak ng kulay sa format na BGR.
Katotohanang Katotohanan: - Gumagamit kami ng order ng BGR sa mga computer dahil sa kung paano nakaimbak sa memorya ang hindi naka-sign na 32-bit integer, nagtatapos pa rin itong naimbak bilang RGB. Ang integer na kumakatawan sa isang kulay hal: - 0X00BBGGRR ay itatago bilang 0XRRGGBB.
Puwang ng kulay ng HSVAng HSV (Hue, saturation & value / Brightness) ay isang puwang ng kulay na sumusubok na kumatawan sa mga kulay na nakikita ito ng mga tao. Nag-iimbak ito ng impormasyon ng kulay sa isang cylindrical na representasyon ng mga puntos ng kulay ng RGB.
Hue - halaga ng kulay (0-179)
Saturation - Vibrancy ng kulay (0-255)
Halaga - Liwanag o kasidhian (0-255)
Ang format ng puwang ng kulay ng HSV ay kapaki-pakinabang sa paghihiwalay ng kulay. Sa RGB, ang pag-filter ng tiyak na kulay ay hindi madali, subalit ginagawang mas madali ng HSV upang magtakda ng mga saklaw ng kulay upang ma-filter ang tukoy na kulay ayon sa nakikita natin ang mga ito.
Kinakatawan ng Hue ang kulay sa HSV, ang halaga ng kulay ng kulay ay mula sa 0 - 180 at hindi 360 sa gayon hindi nito nakukumpleto ang buong bilog at sa gayon nai-map ito nang iba kaysa sa pamantayan.
Mga filter ng saklaw ng kulay
- Pula - (165-15)
- Green - (45-75)
- Asul - (90-120)
Tulad ng alam natin ang mga imaheng nakaimbak sa puwang ng kulay ng RGB (Red, Green at Blue) at sa gayon ay ipinapakita sa amin ng OpenCV ang pareho, ngunit ang unang bagay na dapat tandaan tungkol sa format na RGB ng opencv ay talagang BGR ito at malalaman natin ito sa pamamagitan ng pagtingin sa hugis ng imahe.
import cv2 import numpy as np image = cv2.imread ('input.jpg') # B, G, R na halaga para sa unang 0,0 pixel B, G, R = image print (B, G, R) print (imahe.shape) #gayon kung ilalapat namin ito sa grayscale na imahe na grey_img = cv2.cvtColor (imahe, cv2.COLOR_BGR2GRAY) naka- print (grey_img.shape) #gray_image pixel na halaga para sa 10,50 pixel print (grey_img)
Output ng Console: print (B, G, R) - 6 11 10
print (image.shape) - (183, 275, 3)
print (grey_img.shape) - (183, 275)
print (grey_img) - 69
Ngayon ay may dalawang dimensyon lamang sa isang kulay-abo na imahe ng sukat, dahil naaalala namin ang kulay ng imahe ay nakaimbak sa tatlong sukat, ang pangatlong dimensyon ay ang (R, G, B) habang sa grayscale dalawang dimensyon lamang ang naroroon, dahil (R, G, B) ay wala at para sa isang partikular na posisyon ng pixel nakakakuha lamang kami ng isang solong halaga habang sa may kulay na imahe nakuha namin ang tatlong mga halaga.
Ang isa pang kapaki-pakinabang na puwang sa kulay ay HSV
import cv2 image = cv2.imread ('input.jpg') hsv_image = cv2.cvtColor (imahe, cv2.COLOR_BGR2HSV) cv2.imshow ('HSV image', hsv_image) cv2.imshow ('Hue channel', hsv_image) cv2. imshow ('saturation channel', hsv_image) cv2.imshow ('channel ng halaga', hsv_image) cv2.waitKey () cv2.destroyAllWindows ()
Matapos patakbuhin ang code maaari mong makita ang apat na mga imahe kung saan tatlo sa mga indibidwal na channel at ang isa ay pinagsamang imahe ng HSV.
Ang imahe ng hue channel ay medyo madilim dahil ang halaga nito ay nag-iiba lamang mula 0 hanggang 180.
Gayundin, tandaan na sinusubukan ng pagpapaandar ng imshow na ipakita sa iyo ang imahe ng RGB o BGR, ngunit ang pag-overlap dito ng HSV.
Gayundin, ang halaga ng channel ay magiging katulad ng grayscale ng imahe dahil sa kanyang ningning.
Paggalugad sa mga indibidwal na bahagi ng imahe ng RGB
import cv2 image = cv2.imread ('input.jpg') Ang split function ng # opencv ay nahahati sa imageinti bawat index ng kulay B, G, R = cv2.split (imahe) cv2.imshow ("Pula", R) cv2.imshow ("Green", G) cv2.imshow ("Blue", B) #making ang orihinal na imahe sa pamamagitan ng pinagsasama ang mga indibidwal na mga bahagi ng kulay Pinagsama = cv2.merge () cv2.imshow ("ipinagsama", ipinagsama) #amplifying ang asul na kulay ipinagsama = cv2.merge () cv2.imshow ("pinagsama sa asul na nagpapalaki ", pinagsama) #representing the form of individual color components. # ang output ay magiging dalawang dimensyon lamang kung saan taas at lapad, dahil ang pangatlong elemento ng sangkap ng RGB ay indibidwal na kinakatawan sa print (B.shape) print (R.hugis) print (G.hugis) cv2.waitKey (0) cv2.destroyAllWindows ()
Output ng console: #dimensyon ng imahe mula sa pagpapaandar ng hugis
(183, 275)
(183, 275)
(183, 275)
Pag-convert ng imahe sa indibidwal na sangkap ng RGB
Sa ibaba ng code lumikha kami ng isang matrix ng mga zero na may mga sukat ng imahe HxW, zero ibalik ang isang array na puno ng mga zero ngunit may parehong mga sukat.
Ang pagpapaandar ng hugis ay lubhang kapaki-pakinabang kapag tinitingnan namin ang sukat ng isang imahe, at dito namin nagawa ang paggupit ng pagpapaandar na hugis na iyon. Kayakukunin ng hugis ang lahat hanggang sa itinalagang mga puntos hal hanggang sa pangalawang itinalagang mga puntos na magiging taas at lapad ng imahe bilang pangatlo ay kumakatawan sa RGB na bahagi ng imahe at hindi namin ito kailangan dito.
import cv2 import numpy as np image = cv2.imread ('input.jpg') B, G, R = cv2.split (image) zeros = np.zeros (image.shape, dtype = "uint8") cv2.imshow ("RED", cv2.merge ()) cv2.imshow ("Green", cv2.merge ()) cv2.imshow ("Blue", cv2.merge ()) cv2.waitKey (0) cv2.destroyAllWindows ()
Representasyon ng Larawan ng Histogram
Ang representasyon ng histogram ng imahe ay ang paraan ng pagpapakita ng mga sangkap ng mga imahe.
Hinahayaan ka ng sumusunod na code na pag-aralan ang imahe sa pamamagitan ng histogram ng kulay ng pinagsama at indibidwal na mga sangkap ng kulay.
import cv2 import numpy bilang np #we need to import matplotlib to create histogram plots import matplotlib.pyplot as plt image = cv2.imread ('input.jpg') histogram = cv2.calcHist (,, Wala,,) #we plot a histogram, ravel () pinapalamig ang aming array ng imahe plt.hist (image.ravel (), 256,) plt.show () #viewing magkahiwalay na mga channel ng kulay na kulay = ('b', 'g', 'r') #alam natin ihiwalay ang kulay at lagyan ng plot ang bawat isa sa histogram para sa i, col sa bilangin (kulay): histogram2 = cv2.calcHist (,, Wala,,) plt.plot (histogram2, color = col) plt.xlim () plt.show ()
Unawain natin ang pagpapaandar ng calcHist sa bawat isa sa mga indibidwal na parameter
cv2.calcHist (mga imahe, channel, mask, histize , saklaw)
Mga imahe: ito ang pinagmulan ng imahe ng uri uint 8 o float 32. Dapat itong ibigay sa mga square bracket, ibig sabihin, "", na nagpapahiwatig din ng pangalawang antas ng array dahil ang isang imahe para sa opencv ay data sa isang form na array.
Mga Channel: ibinibigay din ito sa mga square bracket. Ito ang index ng channel kung saan pinapatahimik namin ang histogram, halimbawa kung ang input ay grayscale na imahe ang halaga nito, para sa mga imahe ng kulay na maaari mong ipasa, o upang makalkula ang histogram ng asul, berde at pulang channel ayon sa pagkakabanggit.
Mask: imahe ng maskara. upang hanapin ang histogram ng buong imahe, ibinibigay ito bilang "wala". ngunit kung nais mong hanapin ang histogram ng partikular na rehiyon ng imahe, kailangan mong lumikha ng isang imahe ng mask para doon at ibigay ito bilang isang maskara.
Histsize: Kinakatawan nito ang aming bilang ng BIN. Kailangang ibigay sa mga square bracket para sa buong sukatan na nadaanan namin.
Mga Saklaw: Ito ang aming saklaw, karaniwang
Pagguhit ng Mga Imahe at Hugis gamit ang OpenCV
Nasa ibaba ang ilang mga Halimbawa para sa pagguhit ng mga linya, rektanggulo, polygon, bilog atbp sa OpenCV.
i-import ang cv2 import numpy bilang np #glikha ng isang itim na parisukat na imahe = np.zeros ((512,512,3), np.uint8) Maaari rin nating likhain ito ng itim at puti, subalit walang anumang mga pagbabago sa imahe_bw = np.zeros ((512,512), np.uint8) cv2.imshow ("itim na rektanggulo (kulay)", imahe) cv2.imshow ("itim na rektanggulo (B&W)", image_bw)
Linya
#gumawa ng isang linya sa ibabaw ng itim na parisukat # cv2.line (imahe, nagsisimula ng mga coordinate, nagtatapos na mga coordinate, kulay, kapal) #drawing isang dayagonal na linya ng kapal na 5 pixel na imahe = np.zeros ((512,512,3), np.uint8) cv2.line (imahe, (0,0), (511,511), (255,127,0), 5) cv2.imshow ("asul na linya", imahe)
Parihaba
# Lumikha ng isang rektanggulo sa isang itim na parisukat # cv2.rectangle (imahe, nagsisimula sa mga coordinate, nagtatapos na mga coordinate, kulay, kapal) #drawing isang rektanggulo ng kapal ng 5 pixel na imahe = np.zeros ((512,512,3), np.uint8) cv2.rectangle (imahe, (30,50), (100,150), (255,127,0), 5) cv2.imshow ("rektanggulo", imahe)
#glikha ng isang bilog sa isang itim na parisukat # cv2.circle (imahe, gitna, radius, kulay, punan) imahe = np.zeros ((512,512,3), np.uint8) cv2.circle (imahe, (100,100), (50), (255,127,0), - 1) cv2.imshow ("bilog", imahe)
#glikha ng isang imahe ng polygon = np.zeros ((512,512,3), np.uint8) #lets tukuyin ang apat na puntos pts = np.array (,,,], np.int32) #lets muling baguhin ang anyo ang aming mga puntos sa form na kinakailangan ng polylines pts = pts.reshape ((- 1,1,2)) cv2.polylines (imahe,, True, (0,255,255), 3) cv2.imshow ("polygon", imahe)
#putting teksto gamit ang opencv # cv2.putText (imahe, 'teksto upang ipakita', bootom kaliwang panimulang punto, font, laki ng font, kulay, kapal) imahe = np.zeros ((512,512,3), np.uint8) cv2. putText (imahe, "hello world", (75,290), cv2.FONT_HERSHEY_COMPLEX, 2, (100,170,0), 3) cv2.imshow ("hello world", imahe) cv2.waitKey (0) cv2.destroyAllWindows ()
Ang Computer Vision at OpenCV ay napakalawak na mga paksa upang masakop ngunit ang gabay na ito ay magiging mahusay na panimulang punto upang malaman ang OpenCV at pagproseso ng imahe.